【问题标题】:JavaFX - TextArea where multiple buttons drop TextJavaFX - 多个按钮放置文本的 TextArea
【发布时间】:2023-04-04 12:52:01
【问题描述】:

我有一个带有可扩展按钮数量(大约 20 多个)的 TabPane。 我希望在其左侧有一个区域来连接以前的文本和每个按钮所包含的新文本。

所以一开始,TextArea(也许不是最好用的)是空白的。 然后按 Tab Foo,然后按其各自的按钮之一 Bar。 文本区域将填充 Bar - $10000000000000

我正在使用 StringBuilder。我是否需要让每个按钮向 StringBuilder 添加文本,然后设置 TextArea 以显示该文本?我觉得这会导致每个按钮的代码非常冗余。但是,我认为这是唯一的方法,因为 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("");
    }    

}

【问题讨论】:

  • 你能给我们看一个你的代码示例吗?
  • 添加了代码。谢谢建议
  • 顺便说一句:TextArea 有一个 appendText 方法...(如果您不需要 StringBuilder 来执行除了连接字符串之外的任何操作。)

标签: javafx


【解决方案1】:

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

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

编辑:

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

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

【讨论】:

    猜你喜欢
    • 2015-02-02
    • 1970-01-01
    • 2016-08-30
    • 2015-04-07
    • 2017-03-23
    • 1970-01-01
    • 2018-03-19
    • 2015-08-18
    • 2019-03-15
    相关资源
    最近更新 更多