JavaFX:我需要用一个按钮从文本字段中获取信息
我已经创建了一个文本字段:JavaFX:我需要用一个按钮从文本字段中获取信息,java,javafx,Java,Javafx,我已经创建了一个文本字段: TextField tfPost = new TextField("140 character word count..."); 我还有一个带有ActionEvent处理程序类的按钮: Button btTweet = new Button("Tweet"); TweetHandlerClass btTweetHandler = new TweetHandlerClass(); btTweet.setOnAction(btTweetHandler); class
TextField tfPost = new TextField("140 character word count...");
我还有一个带有ActionEvent处理程序类的按钮:
Button btTweet = new Button("Tweet");
TweetHandlerClass btTweetHandler = new TweetHandlerClass();
btTweet.setOnAction(btTweetHandler);
class TweetHandlerClass implements EventHandler<ActionEvent> {
@Override
public void handle(ActionEvent ae) {
System.out.println("Tweet button was clicked");
String newTweet = tfPost.getText();
}
}
以下是处理程序类的主体:
Button btTweet = new Button("Tweet");
TweetHandlerClass btTweetHandler = new TweetHandlerClass();
btTweet.setOnAction(btTweetHandler);
class TweetHandlerClass implements EventHandler<ActionEvent> {
@Override
public void handle(ActionEvent ae) {
System.out.println("Tweet button was clicked");
String newTweet = tfPost.getText();
}
}
类TweetHandlerClass实现EventHandler{
@凌驾
公共无效句柄(ActionEvent ae){
System.out.println(“点击了Tweet按钮”);
字符串newTweet=tfPost.getText();
}
}
我需要的是,单击Tweet按钮时,将TextField中的字符串保存到字符串变量中。如何做到这一点?变量范围界定是一个设计问题。OP的问题没有提供足够的信息来理解完整的用例。一种方法是将变量存储在
TweetHandlerClass
中。支持和反对这种做法有各种理由。尽管如此,对于提出的具体问题,这应该足够了
class TweetHandlerClass implements EventHandler<ActionEvent> {
private final TextField tfPost;
public TweetHandlerClass(TextField srcTxtFld)
{
this.tfPost = srcTxtFld;
}
@Override
public void handle(ActionEvent ae) {
System.out.println("Tweet button was clicked");
String newTweet = tfPost.getText();
}
}
如果您真的希望事件处理程序是这样的顶级类,那么可以像@KevinO的回答中那样为它提供一个对
TextField
的引用。在这一点上有一个小小的变化,就是引用一个供应商
,这在语义上是您真正需要的:
class TweetHandlerClass implements EventHandler<ActionEvent> {
private final Supplier<String> tweetSupplier ;
TweetHandlerClass(Supplier<String> tweetSupplier) {
this.tweetSupplier = tweetSupplier ;
}
@Override
public void handle(ActionEvent ae) {
System.out.println("Tweet button was clicked");
String newTweet = tweetSupplier.get();
}
}
不过,这简直是矫枉过正。通常,您只需使用lambda表达式定义事件处理程序,而不是显式类:
Button btTweet = new Button("Tweet");
btTweet.setOnAction(e -> {
System.out.println("Tweet button was clicked");
String newTweet = tfPost.getText();
// ..
});
“保存到字符串变量”是什么意思?
String newTweet
不是按下按钮时创建的字符串变量吗?哦,是的,对不起。出于某种原因,这是行不通的。它说,找不到符号“tfPost”,请确保TextField tfPost
是类的实例变量(最好是final)。如果它说找不到符号,说明你的作用域有问题。它仍然不起作用事件处理程序是内部类还是顶级类?它会起作用,但在任何大小合理的应用程序中,此策略将创建比您合理处理的代码和源文件多得多的代码和源文件。。。