我无法将 TextField 的信息从一个类传递到另一个类

问题描述 投票:0回答:1

我正在尝试制作一个注册程序,所以创建了一个小窗口,我可以在其中键入要注册的名称,并在按下按钮时将其保存在另一个类中。但是另一个类并没有从字符串中提取信息。

public class Puxarclasse 
{
    public static void main(String[] args) 
    {
        new ClassePuxar();
        
        ArrayList lista = new ArrayList ();
        lista.add(ClassePuxar.stringTeste);
        System.out.println(lista);
    }
}
public class ClassePuxar implements ActionListener
{
    private static JButton botao;
    private static JTextField tfPuxar;
    public static String stringTeste;
    public ClassePuxar () 
    {
        JFrame frame  = new JFrame();
        JPanel panel = new JPanel();
         tfPuxar = new JTextField();
         botao = new JButton ();
        
        frame.setSize (400, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        tfPuxar.setBounds(50,60,300,20);
        botao.setBounds(150,110,100,20);
        botao.addActionListener(this);
        
        panel.setLayout(null);
        
        frame.add(panel);
        panel.add(tfPuxar);
        panel.add (botao);
        frame.setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) 
    {
        stringTeste = tfPuxar.getText();
        tfPuxar.setText ("");
    }
}

java arraylist jbutton
1个回答
0
投票

你在一个事件驱动的环境中工作,也就是说,在未来的某个时刻,会发生一些事情,然后你可以响应它。

你的思维定式似乎处于一个程序化的工作流程中(事情以线性时间顺序发生)

例如...

new ClassePuxar();
    
ArrayList lista = new ArrayList ();
lista.add(ClassePuxar.stringTeste);
System.out.println(lista);

当窗口(相关

ClassePuxar
)出现在屏幕上时,
ArrayList
代码已经运行,因此用户没有机会实际输入任何信息。

你必须有基本的选择:

  1. 使用某种观察者模式在数据以某种有意义的方式发生变化时生成事件
  2. 使用模态对话框。有关详细信息,请参阅如何制作对话框

哦,

static
在这种情况下不是跨对象通信机制,以这种方式实现是一个坏主意。

null
布局也是一个坏主意。花时间和精力学习如何使用各种布局管理器

模态对话框...

所以,您可以用...替换几乎所有代码

String input = JOptionPane.showInputDialog(null, "Show me the input", "Input", JOptionPane.PLAIN_MESSAGE);
if (input != null) {
    ArrayList lista = new ArrayList();
    lista.add(input);
    System.out.println(lista);
}

你应该得到基本的预期结果。

© www.soinside.com 2019 - 2024. All rights reserved.