JavaFX-文本区域,多个按钮在其中放置文本

JavaFX-文本区域,多个按钮在其中放置文本,javafx,Javafx,我有一个可扩展的按钮(大约20多个)选项卡窗格。 我希望在其左侧有一个区域,将以前的文本与每个按钮包含的新文本连接起来 因此,在开始时,文本区域(可能不是最好使用的)是空白的。 然后按Tab Foo键,然后按其中一个相应的按钮栏。 文本区域将填充条-$100000000000 我正在使用StringBuilder。我是否需要让每个按钮向StringBuilder添加文本,然后设置TextArea以显示该文本?我觉得这会导致每个按钮都有冗余代码。但是,我认为这是唯一的方法,因为文本区域只有在按下特

我有一个可扩展的按钮(大约20多个)选项卡窗格。 我希望在其左侧有一个区域,将以前的文本与每个按钮包含的新文本连接起来

因此,在开始时,文本区域(可能不是最好使用的)是空白的。 然后按Tab Foo键,然后按其中一个相应的按钮栏。 文本区域将填充条-$100000000000

我正在使用StringBuilder。我是否需要让每个按钮向StringBuilder添加文本,然后设置TextArea以显示该文本?我觉得这会导致每个按钮都有冗余代码。但是,我认为这是唯一的方法,因为文本区域只有在按下特定按钮时才能获取文本

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextArea;

/**
 * FXML Controller class
 *
 * @author David
 */
public class MainMenuController implements Initializable {

    private StringBuilder fieldContent;

    @FXML TextArea txtReceipt;

    @FXML
    void btnExample(ActionEvent event) {
        fieldContent.append(btnExample.getText());
        txtReceipt.setText(fieldContent.toString());
    }

    void btnExample2(ActionEvent event) {
        fieldContent.append(btnExample.getText());;
        txtReceipt.setText(fieldContent.toString());
    }

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        fieldContent = new StringBuilder("");
    }    

}

重复20多个相同代码块肯定违反了DRY原则!不要为每个按钮使用唯一的处理程序函数,而是返回到FXML,让它们都指向单个处理程序。您可以编写如下通用处理程序:

@FXML
public void buttonPressHandler(ActionEvent event) {
    Button b = (Button) event.getSource();
    fieldContent.append(b.getText());
    txtReceipt.setText(fieldContent.toString());
}
编辑:

正如Fabian在原始问题的评论中提到的,TextArea已经内置了appendText方法,因此您可以删除StringBuilder并更改处理程序,如下所示:

@FXML
public void buttonPressHandler(ActionEvent event) {
    Button b = (Button) event.getSource();
    txtReceipt.appendText(b.getText());
}

重复20多个相同代码块肯定违反了DRY原则!不要为每个按钮使用唯一的处理程序函数,而是返回到FXML,让它们都指向单个处理程序。您可以编写如下通用处理程序:

@FXML
public void buttonPressHandler(ActionEvent event) {
    Button b = (Button) event.getSource();
    fieldContent.append(b.getText());
    txtReceipt.setText(fieldContent.toString());
}
编辑:

正如Fabian在原始问题的评论中提到的,TextArea已经内置了appendText方法,因此您可以删除StringBuilder并更改处理程序,如下所示:

@FXML
public void buttonPressHandler(ActionEvent event) {
    Button b = (Button) event.getSource();
    txtReceipt.appendText(b.getText());
}

你能给我们看一个你的代码的例子吗。建议的Thx BTW:
TextArea
有一个
appendText
方法。。。(如果您不需要
StringBuilder
来执行除连接字符串以外的任何操作。)您可以向我们展示您的代码示例吗?添加的代码。建议的Thx BTW:
TextArea
有一个
appendText
方法。。。(如果您不需要
StringBuilder
来执行连接字符串以外的任何操作。)