我在JavaFx中使用webview,在我的应用程序中,我有几个面板,我想嵌入浏览器窗口。我正在努力面向对象位。你能看到我需要做些什么不同的事情吗?
在我的主程序中,我有一个小组:
JPanel jPanel = new JPanel(new BorderLayout());
browser browser = new browser(jPanel);
browser.setVisible(true);
browser.loadURL("http://www.google.com");
我在第二行有一个红色下划线。
在我的浏览器课程中:
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javax.swing.*;
import java.awt.*;
import java.net.MalformedURLException;
import java.net.URL;
public class browser extends JFrame {
private final JFXPanel jfxPanel = new JFXPanel();
private WebEngine engine;
//private final JPanel panel = new JPanel(new BorderLayout());
public browser(object panel) {
super();
initComponents();
}
private void initComponents() {
createScene();
panel.add(jfxPanel, BorderLayout.CENTER);
getContentPane().add(panel);
setPreferredSize(new Dimension(1024, 600));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
}
private void createScene() {
Platform.runLater(new Runnable() {
@Override
public void run() {
WebView view = new WebView();
engine = view.getEngine();
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;
}
}
}
我得到一个红色下划线,表示对象以及它所说的面板。
答案 0 :(得分:0)
public browser(object panel)
您的变量panel
很可能是一个对象,但类对象定义为Object
,而不是object
。导致"红线"又名编译错误。
您在面板上遇到编译器错误的原因是因为它们在您的其他方法中不可见。您将对象panel
传递给构造函数,但它永远不会在类中设置。例如。制作类范围的变量,如:
private Object panel;
public browser(Object panel) {
super();
initComponents();
this.panel = panel;
}
这样就可以在整个班级中看到你的面板对象了。