简体   繁体   中英

size issue of JPanel from another class inside the JFrame of Main class

I'm trying to add JavaFx Browser components into my swing application. I need to load browsers in tabbed panes and set the url's to those browsers dynamically during runtime. So i have the following code which renders the browser into the JFrame, but the output does not comes out in the size of the frame. The browser component gets displayed in small size inside the tabbed pane rather than in the full frame size. Please guide me where to correct from the following code:

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

}

Read about..

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

This Simple Swing Browser

Browser java known = Lobo Web Browser, Willow, xBrowser

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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