Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTextfield将文本发送到控制器_Java_Model View Controller - Fatal编程技术网

Java JTextfield将文本发送到控制器

Java JTextfield将文本发送到控制器,java,model-view-controller,Java,Model View Controller,在我的程序中,我有以下代码 panel.java public class Panel extends JPanel { private JTextField myText; private JButton confirm; public Panel(){ createComponents(); addComponents(); } private void createComponents(){ my

在我的程序中,我有以下代码

panel.java

public class Panel extends JPanel {
    private JTextField myText;
    private JButton confirm;

    public Panel(){
        createComponents();
        addComponents();
    }

    private void createComponents(){
         myText = new JTextField(10);
         confirm = new JButton("confirm");
         confirm.addActionListner(new Controller(myText.getText()));
    }

    private void addComponents(){
        add(mytext);
        add(confirm);
    }
}
 public class Controller implements ActionListner {
    private String text;

    public Controller(String text){
        this.text = text;
    }

    @Override
    public void ActionPerformed(ActionEvent e){
        System.out.println(text);
    }
 }
我有控制器

Controller.java

public class Panel extends JPanel {
    private JTextField myText;
    private JButton confirm;

    public Panel(){
        createComponents();
        addComponents();
    }

    private void createComponents(){
         myText = new JTextField(10);
         confirm = new JButton("confirm");
         confirm.addActionListner(new Controller(myText.getText()));
    }

    private void addComponents(){
        add(mytext);
        add(confirm);
    }
}
 public class Controller implements ActionListner {
    private String text;

    public Controller(String text){
        this.text = text;
    }

    @Override
    public void ActionPerformed(ActionEvent e){
        System.out.println(text);
    }
 }
问题是:当我将文本传输到控制器时,我收到一个空的
字符串。当我不使用控制器时,我可以在询问时看到我的文本
confirm.addActionListner(newActionListner()…)

我需要使用控制器,因为我需要在MVC模式下编程。是否有将我的文本传输到控制器的选项

提前谢谢

  private void createComponents(){
     myText = new JTextField(10);
     confirm = new JButton("confirm");
     confirm.addActionListner(new Controller(myText.getText())); // when you create this there is no text in myText TextField
}

另外,java swing JTextField不是可绑定组件。

正如我已经说过的:与其将文本提供给actionlistener,不如在textfield上给他一个引用,并在actionlistener中调用getText()

更改
confirm.addActionListner(新控制器(myText.getText())
确认.addActionListner(新控制器(myText))


这是因为您将字符串传递给构造函数。执行此操作时,文本为空,因为在添加ActionListener时myText对象具有空文本。相反,您应该传入myText组件,以便在设置action listener时,它可以从该组件中获取新值。

您实际上不是在用字符串填充myText。与其将文本提供给actionlistener,不如在您的textfield上给他一个引用,然后在actionlistener中调用getText(),您还应该正确命名变量。像myText->myTextField和confirm->confirmButton这样的东西会更容易阅读,在这种情况下,您不再需要字符串文本变量了。这是真的,ty。我把它拿走了。