Java 在主类的JFrame中,来自另一个类的JPanel的大小问题

Java 在主类的JFrame中,来自另一个类的JPanel的大小问题,java,swing,jakarta-ee,javafx,Java,Swing,Jakarta Ee,Javafx,我正在尝试将JavaFx浏览器组件添加到我的swing应用程序中。我需要在选项卡式窗格中加载浏览器,并在运行时动态设置这些浏览器的url。因此,我有以下代码将浏览器渲染到JFrame中,但输出的大小与frame的大小不同。浏览器组件在选项卡式窗格中以小尺寸显示,而不是以全帧尺寸显示。请指导我在何处更正以下代码: public class BrowserScene extends JPanel { private static final long serialVersionUID =

我正在尝试将JavaFx浏览器组件添加到我的swing应用程序中。我需要在选项卡式窗格中加载浏览器,并在运行时动态设置这些浏览器的url。因此,我有以下代码将浏览器渲染到JFrame中,但输出的大小与frame的大小不同。浏览器组件在选项卡式窗格中以小尺寸显示,而不是以全帧尺寸显示。请指导我在何处更正以下代码:

    public class BrowserScene extends JPanel {

private static final long serialVersionUID = 5114913691608034106L;
private JFXPanel jfxPanel;
private WebEngine engine;

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();
    jfxPanel.setSize(new Dimension(1200, 1000));

    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);

    add(panel);     
}

private void createScene() {

    Platform.runLater(new Runnable() {
        @Override
        public void run() {

            WebView view = new WebView();
            Group group = new Group();
            Scene scene = new Scene(group);
            jfxPanel.setScene(scene);
            group.getChildren().add(view);

            engine = view.getEngine();
            engine.setJavaScriptEnabled(true);

            /*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);
        }
    });
}

public void loadURL(final StringBuffer buffer) {
    Platform.runLater(new Runnable() {
        @Override
        public void run() {
            engine.loadContent(buffer.toString());
        }
    });
}

public String getUrl() {
    return engine.getLocation();
}

private String toURL(String str) {
    try {
        return new URL(str).toExternalForm();
    } catch (MalformedURLException exception) {
        return null;
    }
}

public BrowserScene() {
    initComponents();

    loadURL("http://www.google.co.in");
}

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            JTabbedPane tabbedPane = new JTabbedPane();
            BrowserScene jfb = new BrowserScene();
            jfb.validate();  // update and redisplay
            tabbedPane.add(jfb);
            JFrame frame = new JFrame();
            frame.setLayout(new GridLayout());
            frame.add(tabbedPane);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Toolkit tk = Toolkit.getDefaultToolkit();
            Dimension dim = tk.getScreenSize();
            frame.setMaximumSize(dim);
            frame.setMinimumSize(dim);
            frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
            frame.setMaximizedBounds(null);
            //  frame.setResizable(false);
            frame.pack();
            frame.setVisible(true);
        }
    });
}
公共类浏览器场景扩展JPanel{
私有静态最终长serialVersionUID=5114913691608034106L;
私人JFXPanel JFXPanel;
私有网络引擎;
private JPanel panel=new JPanel(new BorderLayout());
私有JLabel lblStatus=新JLabel();
私有JButton btnGo=新JButton(“Go”);
私有JTextField txtrl=新JTextField();
private JProgressBar progressBar=新的JProgressBar();
私有组件(){
jfxPanel=新的jfxPanel();
jfxPanel.setSize(新尺寸(1200,1000));
createScene();
ActionListener al=新的ActionListener(){
@凌驾
已执行的公共无效操作(操作事件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);
添加(面板);
}
私有void createScene(){
Platform.runLater(新的Runnable(){
@凌驾
公开募捐{
WebView视图=新建WebView();
组=新组();
场景=新场景(组);
jfxPanel.setScene(场景);
group.getChildren().add(视图);
engine=view.getEngine();
engine.setJavaScriptEnabled(true);
/*engine.titleProperty().addListener(
新的ChangeListener(){
@凌驾
更改公众假期(
可观察值了解

这个简单的Swing浏览器

浏览器java已知=Lobo Web浏览器、Willow、xBrowser