【问题标题】:passing objects to a class in java将对象传递给java中的类
【发布时间】: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

标签: java oop javafx webview


【解决方案1】:
public browser(object panel)

您的变量panel 很可能是一个对象,但类对象定义为Object,而不是object。导致“红线”A.K.A.编译器错误。

您在面板上也收到编译器错误的原因是因为它们在您的其他方法中不可见。您将对象panel 传递给构造函数,但它从未在类中设置。例如。制作一个类范围的变量,例如:

private Object panel;
public browser(Object panel) {
    super();
    initComponents();
    this.panel = panel;
}

这将使您的面板对象在整个班级中都可见。

【讨论】:

  • 感谢您的帮助。这设法完成了工作。如果我能给每个人一个我会喜欢的。
猜你喜欢
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多