Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
支持Javascript和CSS的JEditorPane_Java_Html_Swing_Jtextpane_Jeditorpane - Fatal编程技术网

支持Javascript和CSS的JEditorPane

支持Javascript和CSS的JEditorPane,java,html,swing,jtextpane,jeditorpane,Java,Html,Swing,Jtextpane,Jeditorpane,我正在使用JEditorPane开发Swing,但它不支持Javascript或一些高级标记,如等,也不支持颜色、字体大小等 是否有任何解决方案,使编辑器窗格可以在普通HTML浏览器中显示HTML文件? 当前的Java6/7仅支持(高达)HTML3.2,对css的支持减少 对于Html5和非常全面的css支持,使用JavaFx组件 有一些自定义Java库(完全支持Html4/5、css和js),但我建议使用JavaFX +1至mKorbel 通过将其与Swing集成来支持HTML5的使用 以下是

我正在使用
JEditorPane
开发Swing,但它不支持Javascript或一些高级标记,如
等,也不支持颜色、字体大小等

是否有任何解决方案,使编辑器窗格可以在普通HTML浏览器中显示HTML文件?

  • 当前的
    Java6/7
    仅支持(高达)
    HTML3.2
    ,对
    css
    的支持减少

  • 对于
    Html5
    和非常全面的
    css支持
    ,使用
    JavaFx组件

  • 有一些自定义Java库(完全支持Html4/5、css和js),但我建议使用
    JavaFX

    • +1至mKorbel

      通过将其与Swing集成来支持HTML5的使用

      以下是一个例子:

      import java.awt.*;
      import java.awt.event.*;
      import java.net.MalformedURLException;
      import java.net.URL;
      import javafx.application.Platform;
      import javafx.beans.value.ChangeListener;
      import javafx.beans.value.ObservableValue;
      import static javafx.concurrent.Worker.State.FAILED;
      import javafx.embed.swing.JFXPanel;
      import javafx.event.EventHandler;
      import javafx.scene.Scene;
      import javafx.scene.web.WebEngine;
      import javafx.scene.web.WebEvent;
      import javafx.scene.web.WebView;
      import javax.swing.*;
      
      public class SimpleSwingBrowser implements Runnable {
          private JFXPanel jfxPanel;
          private WebEngine engine;
      
          private JFrame frame = new JFrame();
          private JPanel panel = new JPanel(new BorderLayout());
          private JLabel lblStatus = new JLabel();
      
          private JButton btnGo = new JButton("Go");
          private JTextField txtURL = new JTextField();
          private JProgressBar progressBar = new JProgressBar();
      
          private void initComponents() {
              jfxPanel = new JFXPanel();
      
              createScene();
      
              ActionListener al = new ActionListener() {
                  @Override public void actionPerformed(ActionEvent e) {
                      loadURL(txtURL.getText());
                  }
              };
      
              btnGo.addActionListener(al);
              txtURL.addActionListener(al);
      
              progressBar.setPreferredSize(new Dimension(150, 18));
              progressBar.setStringPainted(true);
      
              JPanel topBar = new JPanel(new BorderLayout(5, 0));
              topBar.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 5));
              topBar.add(txtURL, BorderLayout.CENTER);
              topBar.add(btnGo, BorderLayout.EAST);
      
      
              JPanel statusBar = new JPanel(new BorderLayout(5, 0));
              statusBar.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 5));
              statusBar.add(lblStatus, BorderLayout.CENTER);
              statusBar.add(progressBar, BorderLayout.EAST);
      
              panel.add(topBar, BorderLayout.NORTH);
              panel.add(jfxPanel, BorderLayout.CENTER);
              panel.add(statusBar, BorderLayout.SOUTH);
      
              frame.getContentPane().add(panel);
          }
      
          private void createScene() {
      
              Platform.runLater(new Runnable() {
                  @Override public void run() {
      
                      WebView view = new WebView();
                      engine = view.getEngine();
      
                      engine.titleProperty().addListener(new ChangeListener<String>() {
                          @Override
                          public void changed(ObservableValue<? extends String> observable, String oldValue, final String newValue) {
                              SwingUtilities.invokeLater(new Runnable() {
                                  @Override public void run() {
                                      frame.setTitle(newValue);
                                  }
                              });
                          }
                      });
      
                      engine.setOnStatusChanged(new EventHandler<WebEvent<String>>() {
                          @Override public void handle(final WebEvent<String> event) {
                              SwingUtilities.invokeLater(new Runnable() {
                                  @Override public void run() {
                                      lblStatus.setText(event.getData());
                                  }
                              });
                          }
                      });
      
                      engine.locationProperty().addListener(new ChangeListener<String>() {
                          @Override
                          public void changed(ObservableValue<? extends String> ov, String oldValue, final String newValue) {
                              SwingUtilities.invokeLater(new Runnable() {
                                  @Override public void run() {
                                      txtURL.setText(newValue);
                                  }
                              });
                          }
                      });
      
                      engine.getLoadWorker().workDoneProperty().addListener(new ChangeListener<Number>() {
                          @Override
                          public void changed(ObservableValue<? extends Number> observableValue, Number oldValue, final Number newValue) {
                              SwingUtilities.invokeLater(new Runnable() {
                                  @Override public void run() {
                                      progressBar.setValue(newValue.intValue());
                                  }
                              });
                          }
                      });
      
                      engine.getLoadWorker()
                              .exceptionProperty()
                              .addListener(new ChangeListener<Throwable>() {
      
                                  public void changed(ObservableValue<? extends Throwable> o, Throwable old, final Throwable value) {
                                      if (engine.getLoadWorker().getState() == FAILED) {
                                          SwingUtilities.invokeLater(new Runnable() {
                                              @Override public void run() {
                                                  JOptionPane.showMessageDialog(
                                                          panel,
                                                          (value != null) ?
                                                          engine.getLocation() + "\n" + value.getMessage() :
                                                          engine.getLocation() + "\nUnexpected error.",
                                                          "Loading error...",
                                                          JOptionPane.ERROR_MESSAGE);
                                              }
                                          });
                                      }
                                  }
                              });
      
                      jfxPanel.setScene(new Scene(view));
                  }
              });
          }
      
          public void loadURL(final String url) {
              Platform.runLater(new Runnable() {
                  @Override public void run() {
                      String tmp = toURL(url);
      
                      if (tmp == null) {
                          tmp = toURL("http://" + url);
                      }
      
                      engine.load(tmp);
                  }
              });
          }
      
          private static String toURL(String str) {
              try {
                  return new URL(str).toExternalForm();
              } catch (MalformedURLException exception) {
                      return null;
              }
          }
      
          @Override public void run() {
      
              frame.setPreferredSize(new Dimension(1024, 600));
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
              initComponents();
      
              loadURL("http://oracle.com");
      
              frame.pack();
              frame.setVisible(true);
          }
      
          public static void main(String[] args) {
              SwingUtilities.invokeLater(new SimpleSwingBrowser());
          }
      }
      

      import java.awt.*;
      导入java.awt.event.*;
      导入java.net.MalformedURLException;
      导入java.net.URL;
      导入javafx.application.Platform;
      导入javafx.beans.value.ChangeListener;
      导入javafx.beans.value.observeValue;
      导入静态javafx.concurrent.Worker.State.State失败;
      导入javafx.embed.swing.JFXPanel;
      导入javafx.event.EventHandler;
      导入javafx.scene.scene;
      导入javafx.scene.web.WebEngine;
      导入javafx.scene.web.WebEvent;
      导入javafx.scene.web.WebView;
      导入javax.swing.*;
      公共类SimpleSwingBrowser实现可运行{
      私人JFXPanel JFXPanel;
      私有网络引擎;
      私有JFrame=新JFrame();
      private JPanel panel=new JPanel(new BorderLayout());
      私有JLabel lblStatus=新JLabel();
      私有JButton btnGo=新JButton(“Go”);
      私有JTextField txtrl=新JTextField();
      private JProgressBar progressBar=新的JProgressBar();
      私有组件(){
      jfxPanel=新的jfxPanel();
      createScene();
      ActionListener al=新的ActionListener(){
      @覆盖已执行的公共无效操作(ActionEvent e){
      loadURL(txtURL.getText());
      }
      };
      btnGo.addActionListener(al);
      txtURL.addActionListener(al);
      progressBar.setPreferredSize(新尺寸(150,18));
      progressBar.SetStringPaint(真);
      JPanel topBar=新的JPanel(新的边界布局(5,0));
      topBar.setBorder(BorderFactory.CreateEmptyByOrder(3,5,3,5));
      添加(txtURL,BorderLayout.CENTER);
      添加(btnGo,BorderLayout.EAST);
      JPanel状态栏=新的JPanel(新的边界布局(5,0));
      statusBar.setBorder(BorderFactory.CreateEmptyByOrder(3,5,3,5));
      添加(lblStatus,BorderLayout.CENTER);
      添加(progressBar,BorderLayout.EAST);
      面板。添加(顶栏,边框布局。北);
      添加(jfxPanel,BorderLayout.CENTER);
      panel.add(状态栏,BorderLayout.SOUTH);
      frame.getContentPane().add(面板);
      }
      私有void createScene(){
      Platform.runLater(新的Runnable(){
      @重写公共无效运行(){
      WebView视图=新建WebView();
      engine=view.getEngine();
      engine.titleProperty().addListener(新的ChangeListener()){
      @凌驾
      
      更改公众假期(ObservableValue@MadProgrammer+1谢谢,我很想为代码赢得荣誉,但它刚刚从参考资料中删除:PYes,但你知道在哪里可以找到它;)先生,我必须在swing窗口上添加和删除javafx控件当JFXPanel被删除时,它不能再添加到容器窗口上