2013-03-15 28 views
1

我试图将JavaFx浏览器组件添加到我的swing应用程序中。我需要在选项卡式窗格中加载浏览器,并在运行时动态地将url设置为这些浏览器。所以我有以下代码将浏览器渲染到JFrame中,但输出不会以帧的大小显示。浏览器组件在选项卡窗格内以小尺寸显示,而不是以全帧大小显示。请指导我在哪里,从下面的代码来纠正:从Main类的JFrame中的另一个类的JPanel的大小问题

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

}

回答