2015-02-10 14 views
0

我試圖用JavaFX做一個瀏覽器我想加載一個網頁在FXMLFile1包含WebView和在FXMLfile2有一個按鈕加載WebView中的網頁在FXMLFile1我寫這段代碼,但不幸沒有工作:如何點擊fxml2中的按鈕在JavaFX中的fxml1中加載網頁?

@FXML 
public void tabfirst (ActionEvent ee) throws IOException { 


    try { 

     FXMLLoader vve = new FXMLLoader(getClass().getResource("Choose.fxml")); 
     Button b1 = tab1b = vve.getController(); 
     FXMLLoader vvve = new FXMLLoader(getClass().getResource("WorkSpace.fxml"));   
     WebView wv = web1 = vvve.getController(); 

     WebEngine myWebEngine = wv.getEngine(); 
     myWebEngine.load("https://www.google.com"); 
    } 
    catch (IOException e){ 


    } 

} 

注意到這一類tabfirst是在,在web視圖打開網頁和兩個FXMLfiles都使用相同的控制器FXMLFile2按鈕。請回答我,謝謝!

+0

可能重複[如何通過點擊其他階段的按鈕在WebView中加載一個網頁?](HTTP://計算器.com/questions/28349951 /如何在網頁瀏覽中按一下按鈕以在其他階段加載) – Jurgen 2015-02-10 14:11:43

+0

您之前和您之前詢問過此問題在這裏沒有提供任何額外的信息。 – Jurgen 2015-02-10 14:13:14

+0

這兩個FXML文件沒有使用相同的控制器。您不設置控制器(或控制器工廠),因此默認情況下每個FXMLLoader都會創建一個不同的控制器。 – 2015-02-10 16:38:36

回答

0

你選擇控制器可有這樣的事情:

public class Choose 
{ 
    @FXML private TextField addressField; 

    /** for Button in FXML onAction="#useAddress" */ 
    @FXML private void useAddress() 
    { 
     addressProp.set(addressField.getText()); 
    } 

    private final StringProperty addressProp = new SimpleStringProperty(); 

    public StringProperty addressProperty() 
    { 
     return addressProp; 
    } 
} 

而且你的工作空間控制可能有:

public class WorkSpace 
{ 
    @FXML private WebView web; 

    public void setAddress(String address) 
    { 
     web.getEngine().load(address); 
    } 
} 

然後在加載這兩個文件FXML你必須像控制器:

FXMLLoader workFxml = new FXMLLoader(getClass().getResource("WorkSpace.fxml")); 
    Node workView = workFxml.load(); // You must call load BEFORE getController ! 
    WorkSpace workCtrl = workFxml.getController(); 

    FXMLLoader chooseFxml = new FXMLLoader(getClass().getResource("Choose.fxml")); 
    Node chooseView = chooseFxml.load(); 
    Choose chooseCtrl = chooseFxml.getController(); 

    chooseCtrl.addressProperty().addListener 
    ( 
     (ov, old, newAddress) -> workCtrl.setAddress(newAddress) 
    ); 

或者,如果您正在加載兩個FXML文件與如父FXML內瑪:<fx:include fx:id="work" source="WorkSpace.fxml"/>你會使用:

@FXML private WorkSpace workController; // Must end with Controller ! 
@FXML private Choose chooseController; 

@FXML private void initialize() 
{ 
    chooseController.addressProperty().addListener 
    (
     (ov, old, newAddress) -> workController.setAddress(newAddress) 
    ); 
} 
相關問題