【发布时间】:2016-03-26 21:45:45
【问题描述】:
我在 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;
}
}
}
我得到一个红色下划线,它说对象和面板的地方。
【问题讨论】:
-
我没有看到你对构造函数中的参数做任何事情,而且我很确定 Java 中的 Object 是大写的。
-
大写
Object。另外,当您不使用该参数时,在构造函数中有没有意义?您永远不会分配给另一个变量。你可能想要一个比java.lang.Object更明确的类型。 -
object是什么,为什么要把它传递给构造函数。如果你想使用像“所有类的超类”这样的对象,它是大写的:Object