java - 使用按钮将 TextField 的值从一个类获取到另一个类

标签 java vaadin

我正在使用 Vaadin 从另一个类获取文本字段的值。

我的解决方案是这样的。

public class MyTextField{

    String str;

    public MyTextField(){
        TextField text = new TextField();
        str = text.getValue().toString();
    }

    public String getStr(){
        return str;
    }    
}

public class MyButton{    
    public MyButton(){
        Button button = new Button("UPDATE");
        button.addListener(new Button.ClickListener(){
            @Override
        public void buttonClick(ClickEvent event) {
                MyTextField text = new MyTextField();
                System.out.println(text.getStr());   
            }
        });
    }    
}

问题是,我总是得到空结果。非常感谢任何帮助。谢谢。

最佳答案

很可能您的 buttonClick 方法中的 MyTextField 对象与显示给用户的 MyTextField 不同。一种解决方案是获取对保存显示的 MyTextField 的类的引用,然后对该引用调用公共(public)方法以提取文本。


编辑 1
请注意,我不熟悉 Vaadin,但您的 MyTextField 类看起来很可疑,因为您正在声明构造函数内部的 TextField 使其仅<可见/strong> 在构造函数中。我也不确定在用户有机会与组件交互之前立即和在任何事件之前调用 getValue() 会做什么。这在我看来非常可疑。


编辑2

例如,如果这是 Swing,我会这样做:

public class MyTextField{

    TextField textField = new TextField();

    public MyTextField(){
    }

    // so it can be added to the gui
    public TextField getTextField() {
      return textField;
    }


    public String getStr(){
        return textField.getValue().toString(); // not sure if this is correct
    }    
}

public class MyButton{  
   private MyTextField textField;
   private Button button = new Button("UPDATE");

   public MyButton(final MyTextField textField){
      this.textField = textField;
      button.addListener(new Button.ClickListener(){
         @Override
         public void buttonClick(ClickEvent event) {
            System.out.println(textField.getStr());   
         }
      });
    }    
}

编辑 3
你问:

you have declared "private MyTextField textfield" as a field and add a parameter (MyTextField textfield) from the MyButton constructor. does it mean that I have to pass the class MyTextField to the MyButton class as a reference?

再次请注意,我不熟悉 Vaadin,但我熟悉 Java 对象的一般用法,这一点我知道。如果您想让一个类(这里是 MyButton)获取另一个对象(这里是 MyTextField)的状态,那么第一个对象需要对第二个对象的有效引用。获取此引用的一种方法是将其作为构造函数参数传递。另一种方法是通过 setter 方法,比如为 MyButton 提供 setMyTextField(TextField textField) 方法,然后将引用分配给您的字段。另一种选择是通过“依赖注入(inject)”,但我认为这目前可能有点太先进了,但在未来一定要考虑。

如果您尝试按照您在原始帖子中所做的那样来做,事情可能会失败,因为当然,您给 MyButton 一个 MyTextField 对象,但是什么 MyTextField 对象是这个?它是在 MyButton 类中创建的,不存在于其他任何地方。

关于java - 使用按钮将 TextField 的值从一个类获取到另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23444538/

相关文章:

java - Vaadin 8 - 应用程序范围的缓存

java - Maven 在 Powershell 中工作但不能在 Cmd Prompt 中工作

java - 当我们将信任管理器与 trustCertCollectionFile 一起使用时,Netty 会跳过主机名验证

java - "Live"Vaadin 应用程序 - 如何更新浏览器 View

vaadin - 在 Vaadin 网格中添加子标题行/汇总行

瓦丁 10+ : How do I handle uncaught exceptions?

java - PDI 勺子步骤中的 HTML 抓取(用户定义的 java 类)

Java SQL - 未正确读取 UserInput(用户名和密码)

java - 我应该在 Java 8 中使用哪个日期类?

java - 关闭 session 后立即触发 destroyListener