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