2014-04-16 14 views
0

場景1及其Scene1Controller!它有一個文本字段(客戶名稱)和一個按鈕!JavaFX Data Mangement

當我單擊場景1中的按鈕時,屏幕上的鍵盤將出現而不會關閉場景!

屏幕鍵盤有它自己的控制器!

屏幕上的鍵盤有一個文本框和完整的鍵盤

輸入「計算器」到屏幕鍵盤的文本框!

按下後進入屏幕鍵盤如何將屏幕鍵盤的文本字段值檢索到場景1的客戶名字段中?

場景1:

<TextField fx:id="CustomerName" layoutX="14.0" layoutY="75.0" onAction="#TextBoxTextChanged" prefHeight="29.0" prefWidth="254.0"/> 
<Button fx:id="OnScreenKeyBoardButton" layoutX="268.0" layoutY="75.0" mnemonicParsing="false" onAction="#ButtonNameClick" prefHeight="29.0" text="..." /> 

屏幕鍵盤:

所有關鍵的和

輸入按鈕代碼:

<Button fx:id="enterButton" layoutX="796.0" layoutY="210.0" minHeight="18.8" mnemonicParsing="false" prefHeight="40.0" prefWidth="90.0" text="Enter" onAction="#ButtonEnterClick"/> 

場景1控制器:

@FXML 
public void ButtonNameClick(final ActionEvent event) 
{ 
    //opens on-screen keyboard 
} 

屏幕鍵盤控制器:

@FXML 
public void ButtonEnterClick(final ActionEvent event) 
{ 
    //code to be written to get the text field of the on-screen keyboard into the textfield of scene 1 
} 
+0

我不使用「fx:include」 – user3542583

+0

如果您想詳細回答問題,請提供代碼示例河 – Pete

+0

@Pete我用代碼 – user3542583

回答

2

只需創建鍵盤控制器屬性來表示文本,並從 「Screen1Controller」 觀察它:

public class KeyboardController { 
    private StringProperty text = new SimpleStringProperty(this, "text", ""); 
    public StringProperty textProperty() { 
     return text ; 
    } 
    public String getText() { 
     return text.get(); 
    } 
    public void setText(String text) { 
     this.text.set(text); 
    } 

    @FXML 
    public void buttonEnterClick(ActionEvent event) { 
     text.set(// text from keyboard) ; 
    } 
    // ... everything else as before 
} 

而且

public class Screen1Controller { 
    @FXML 
    private TextField customerName ; 
    // ... 
    @FXML 
    public void buttonNameClick(ActionEvent event) { 
     FXMLLoader loader = new FXMLLoader(getClass().getResource("Keyboard.fxml")); 
     Parent parent = loader.load(); 
     KeyboardController controller = (KeyboardContoller) loader.getController(); 
     controller.textProperty().addListener(new ChangeListener<String>() { 
      @Override 
      public void changed(ObservableValue<? extends String> obs, String oldValue, String newValue) { 
       // update text field with newValue: 
       customerName.setText(newValue); 
      } 
     }); 
     // show keyboard ... 
    } 

    // other code... 
} 
+0

謝謝您的詳細解答,但屏幕鍵盤只有在buttonNameClick完成其執行後纔會啓動!你不能修改場景1的文本字段。如果你知道我在這種情況下的意思 – user3542583

+0

我並不真正理解那個評論。你試過我的代碼嗎?當執行'KeyboardController'中的'buttonEnterClick(...)'方法時,「場景1」中的'textfield'將被更新。這不是你想要的嗎? –

+0

對不起我的錯誤!感謝您的回答!這是工作! – user3542583