1

JAVAFx でタブ付き Web ブラウザーをコーディングしています。私が直面している問題は次のとおりです。 -
ホームボタン (HomeB) をクリックすると、現在のタブに DEFAULT_URL が読み込まれません。これが私のコードの便利な部分です。誰かがそれを修正してください。ありがとう

        class Browser extends Region{  

            final BorderPane borderPane;  
            final TabPane    tabPane;
    private final HBox       toolbarMain;
                  WebView    browser    = new WebView();
            final  WebEngine webEngine  = browser.getEngine();
    private        String    DEFAULT_URL= "http://www.google.com";     
            final  TextField urlField   = new TextField(DEFAULT_URL);

    //Custom function for creation of New Tabs.  
    private Tab createAndSelectNewTab(final TabPane tabPane, final String title) {  
           Tab     tab         = new Tab(title);

            webEngine.locationProperty().addListener(new ChangeListener<String>() {  
                @Override public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {  
                    urlField.setText(newValue); 
                }  
            }); 
           final ObservableList<Tab> tabs = tabPane.getTabs();  
           tab.closableProperty().bind(Bindings.size(tabs).greaterThan(2));  
           tabs.add(tabs.size() - 1, tab);  
           tabPane.getSelectionModel().select(tab);  
           return tab;  
    } 

    //Initialization function of the program.  
      public Browser() { 
                    borderPane        = new BorderPane();
                    tabPane           = new TabPane();
                    toolbarMain       = new HBox();
                    Button     HomeB  = new Button();
                    HomeB.setText("HOME");

           tabPane.setSide(Side.TOP);  

           final Tab newtab = new Tab();
           newtab.setText("+");


           newtab.setClosable(false); // this will not let the New Tab button(TAB) close  
           tabPane.getTabs().addAll(newtab); //Addition of New Tab to the tabpane.   
           createAndSelectNewTab(tabPane, "        "); 

           //Function to add and display new tabs with default URL display.  
           tabPane.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Tab>() {  
                @Override  
                public void changed(ObservableValue<? extends Tab> observable,  
                          Tab oldSelectedTab, Tab newSelectedTab) {  
                     if (newSelectedTab == newtab) {  
                          Tab tab = new Tab();

                          //WebView - to display, browse web pages.  
                           WebView browser = new WebView();  
                          final WebEngine webEngine = browser.getEngine(); 
                          webEngine.load(DEFAULT_URL);  

                   EventHandler<ActionEvent> goAction = new EventHandler<ActionEvent>() {  
                               @Override public void handle(ActionEvent event) {  
                                    webEngine.load(urlField.getText().startsWith("http://")   
                                              ? urlField.getText()   
                                                        : "http://" + urlField.getText());  
                               }  
                          };  
                          urlField.setOnAction(goAction);

                          final VBox vBox = new VBox(5);  
                          vBox.getChildren().setAll(browser);  
                          VBox.setVgrow(browser, Priority.ALWAYS);  
                          tab.setContent(vBox); 
                          final ObservableList<Tab> tabs = tabPane.getTabs();  
                          tab.closableProperty().bind(Bindings.size(tabs).greaterThan(2));  
                          tabs.add(tabs.size() - 1, tab);  
                          tabPane.getSelectionModel().select(tab);  
                     }  
                }  
           }); 

//OnClick handling HomeB
        HomeB.setOnAction(new EventHandler<ActionEvent>(){
            @Override
            public void handle(ActionEvent event){
                webEngine.load(DEFAULT_URL);
            }
        });

        toolbarMain.getChildren().addAll(HomeB,urlField);

//Placement of elements in borderpane
        borderPane.setCenter(tabPane);
        borderPane.setTop(toolbarMain);
        getChildren().add(borderPane);  
      }

}
4

1 に答える 1

0

HomeBデフォルトの URLをクリックするbrowserと、グローバルWebView. これは機能しますが、このブラウザーをどのタブにも追加していないため、URL が読み込まれていません。

ホーム ボタンの最初のタブを作成するとします。

tabPane.getTabs().addAll(newtab); // tab 0, then moves to 1

// Here you create a new tab, but put it on the 0 index:
createAndSelectNewTab(tabPane, "        "); 

// You can add now your global browser to the first tab:

final VBox vBoxIni = new VBox(5);  
vBoxIni.getChildren().setAll(browser);  
VBox.setVgrow(browser, Priority.ALWAYS);  
tabPane.getTabs().get(0).setContent(vBoxIni);  

他のオプションは、各タブ用に作成したローカル webView を使用し、アクティブなタブに既定の URL を読み込みます。

HomeB.setOnAction(new EventHandler<ActionEvent>(){
    @Override
    public void handle(ActionEvent event){
        VBox vBox=(VBox)tabPane.getSelectionModel().getSelectedItem().getContent();
        if(vBox!=null){
            WebView webView=(WebView)vBox.getChildren().get(0);
            webView.getEngine().load(DEFAULT_URL);
        }
    }
});

最初のタブではコンテンツを設定していないため、これは機能しないことに注意してください。

于 2015-01-15T12:17:12.870 に答える