java 将 html 文件加载到 JEditorPane
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15052690/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Loading html file into JEditorPane
提问by user2104612
Would anyone be able to tell me how I could load a html document into a JEditorPane. I have tried the following which does not seem to work:
谁能告诉我如何将 html 文档加载到 JEditorPane 中。我尝试了以下似乎不起作用的方法:
try{
URL h = new URL("file://test.html");
pane.setPage(h);
} catch (Exception e) {}
回答by Krishna Roy
Open html file in jeditor pane in java
在java的jeditor窗格中打开html文件
JeditorPane editorpane= new JEditorPane();
editorScrollPane = new JScrollPane(editorpane);
editorScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
File file = new File("F://test.htm");
editorpane.setPage(file.toURI().toURL());
editorpane.setEditable(true);
Hope this will help you, Here this is working
希望这会帮助你,这是工作
回答by Daniel Hiller
How about using an absolute path? Look at java.lang.System.getPropertiesand use "user.dir" i.e. to get some absolute path to beef up your file url.
使用绝对路径怎么样?查看java.lang.System.getProperties并使用“user.dir”即获取一些绝对路径来增强您的文件 url。
回答by sadaf2605
you can follow sun's tutorial on webview tutorial on swing... :) http://docs.oracle.com/javafx/2/swing/SimpleSwingBrowser.java.htm
你可以按照 sun 的关于 Swing 的 webview 教程的教程...... :) http://docs.oracle.com/javafx/2/swing/SimpleSwingBrowser.java.htm
I am pasting a source code of their demo.
我正在粘贴他们演示的源代码。
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
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.*;
import java.awt.*;
import java.awt.event.*;
import java.net.MalformedURLException;
import java.net.URL;
import static javafx.concurrent.Worker.State.FAILED;
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());
}
}
回答by John at TimeStored
How to setPage() a JEditorPane with a localfile which is outside of the .jar file?
如何使用位于 .jar 文件之外的本地文件来 setPage() 一个 JEditorPane?
// get location of the code source
URL url = yourpackage.Main.class.getProtectionDomain().getCodeSource().getLocation();
try {
// extract directory from code source url
String root = (new File(url.toURI())).getParentFile().getPath();
File doc = new File(root, "test.htm");
// create htm file contents for testing
FileWriter writer = new FileWriter(doc);
writer.write("<h1>Test</h1>");
writer.close();
// open it in the editor
editor.setPage(doc.toURI().toURL());
} catch (Exception e) {
e.printStackTrace();
}