繁体   English   中英

Main类的JFrame中另一个类的JPanel大小问题

[英]size issue of JPanel from another class inside the JFrame of Main class

我正在尝试将JavaFx浏览器组件添加到我的swing应用程序中。 我需要在选项卡式窗格中加载浏览器,并在运行时动态将URL设置为这些浏览器。 因此,我有以下代码将浏览器呈现到JFrame中,但是输出不会以框架的大小显示。 浏览器组件将在选项卡式窗格中以小尺寸显示,而不是在整个框架中显示。 请根据以下代码指导我在哪里进行更正:

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

}

阅读..

http://docs.oracle.com/javafx/2/swing/SimpleSwingBrowser.java.htm

这个简单的Swing浏览器

浏览器Java已知= Lobo Web浏览器,Willow,xBrowser

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM