2014-11-01 31 views
0

在我的javafx應用程序中,我們有兩個FXML文件first.fxml和second.fxml,相同的firstController.java和secondController.java現在主要問題是first.fxml包含TextField名稱,並在按鈕 當用戶將點擊該按鈕second.fxml顯示在second.fxml我有一個組合框和一個按鈕,當用戶點擊second.fxml按鈕我想將該組合框設置爲first.fxml名稱TextField。如何在另一個JavaFX控制器中設置字符串或文本在JavaFX TextField控制器

我在過去三天在Google上找到解決方案,但沒有得到適當的解決方案。在Java swing中,我使用靜態公共字段來完成此操作,該字段允許我從另一個JFrame訪問JFrame。

急切地等待有用的回覆。

+0

不同的FXML文件是如何加載的?其中一個是'',還是都是從一些常見的位置加載的? – 2014-11-01 23:56:24

+0

這兩個fxml文件都是從一些常見的loacation中加載的 – user3414063 2014-11-03 07:12:26

回答

0

從您的SecondController公開StringProperty。當按下按鈕,將其值設置:

public class SecondController { 

    private final StringProperty selectedValue = new SimpleStringProperty(this, "selectedValue", ""); 

    public final StringProperty selectedValueProperty() { 
     return selectedValue ; 
    } 

    public final void setSelectedValue(String value) { 
     selectedValue.set(value); 
    } 

    public final String getSelectedValue() { 
     return selectedValue.get(); 
    } 

    @FXML 
    private final ComboBox<String> comboBox ; 

    @FXML 
    private void handleButtonPress() { 
     selectedValue.set(comboBox.getValue()); 
    } 
} 

在你FirstController,用於設置文本的方法:

public class FirstController { 
    @FXML 
    private TextField textField ; 

    public void setText(String text) { 
     textField.setText(text); 
    } 
} 

現在,當您加載FXML文件,只是觀察的屬性SecondController,並在FirstController更改時調用該方法:

FXMLLoader firstLoader = new FXMLLoader(getClass().getResource("first.fxml")); 
Parent first = firstLoader.load(); 
FirstController firstController = firstLoader.getController(); 

FXMLLoader secondLoader = new FXMLLoader(getClass().getResource("second.fxml")); 
Parent second = secondLoader.load(); 
SecondController secondController = secondLoader.getController(); 

secondController.selectedValueProperty().addListener((obs, oldValue, newValue) -> 
    firstController.setText(newValue)); 
相關問題