更改TextArea文本值(不同的控制器)

时间:2014-01-14 15:46:31

标签: controller javafx

请帮助

这是我项目的屏幕布局。

enter image description here

具有蓝色背景的区域是具有其自己的控制器的FXML文件,并且键盘区域是具有其自己的控制器的不同FXML文件。单击textArea时会出现键盘区域。

我的问题是,我将如何编码这种情况:

当我按下键盘上的字母Q时,字母'Q'将出现在textArea上。

我遇到困难,因为它来自不同的控制器。拜托,我非常需要你的帮助。

1 个答案:

答案 0 :(得分:0)

让我们调用蓝色区域ControllerAControllerB键盘控制器的控制器。让ControllerA实现以下interface

public interface KeyListener {
    /*
     * Used when a character is typed.
     */
    void keyPress(char typedChar);

    /*
     * Used when esc, backspace ... are pressed.
     * Use keycodes from java.awt.event.KeyEvent. 
     */
    void keyPress(int vkCode);
}

当然,您可以使用其他编码代替java.awt.event.KeyEvent中的键。

现在将以下代码添加到ControllerB

private KeyListener keyListener;

public void setKeyListener(KeyListener keyListener) {
    this.keyListener = keyListener;
}

ControllerA中添加键盘的代码应如下所示:

//...
FXMLLoader fxmlLoader = new FXMLLoader();
Pane keyboardPane = fxmlLoader.load(getClass().
                    getResource("YourKeyboardLayout.fxml").openStream());
ControllerB keyboardController = (ControllerB) fxmlLoader.getController();
keyboardController.setKeyListener(this);
//...

现在你所要做的就是实现KeyListener的功能来调整文本字段中的文本,并在每次按下键盘键时调用keyListener的正确功能。