使用一个类创建和运行多个Java窗口

使用一个类创建和运行多个Java窗口,java,swing,class,jframe,actionlistener,Java,Swing,Class,Jframe,Actionlistener,下面的程序将创建两个简单的窗口,我们可以在其中键入一些文本,它将显示在两个窗口的显示屏上 我创建了一个类来生成UI。但是,当我使用同一个类创建2个对象(typeWriterObj1和typeWriterObj2)并单击btnSend时 键入的消息始终定向并显示在上次创建的窗口中(例如:我在Alice的txtMessage中键入文本,然后单击btnSend,文本显示在Bob的窗口中,而不是Alice的窗口中) 参见下面的示例: public class TextProgram { p

下面的程序将创建两个简单的窗口,我们可以在其中键入一些文本,它将显示在两个窗口的显示屏上

我创建了一个类来生成UI。但是,当我使用同一个类创建2个对象(typeWriterObj1和typeWriterObj2)并单击btnSend时

键入的消息始终定向并显示在上次创建的窗口中(例如:我在Alice的
txtMessage
中键入文本,然后单击
btnSend
,文本显示在Bob的窗口中,而不是Alice的窗口中)

参见下面的示例:

public class TextProgram
{   
    public static void main(String[] args) 
    {       
        TypeWriterUI typeWriterObj1 = new TypeWriterUI();    
        TypeWriterUI typeWriterObj2 = new TypeWriterUI();                    
        TypeWriterObj1.showGUI("Alice");            
        TypeWriterObj2.showGUI("Bob");          
    }    
}

class TypeWriterUI extends JPanel
{
    static JButton btnSend;
    static JTextArea txtDisplay = new JTextArea();
    static JTextArea txtMessage = new JTextArea();

        //...Codes which add the swing components

        //ActionListerner for btnSend which transfer input text from txtMessage to txtDisplay
}

Que:如果不使用多线程,如何解决此问题?

撤消使字段
为静态的操作(每个类一个实例)。两个GUI共享每个按钮实例。这甚至是一个奇迹;可能两次将新的JButton分配给同一个变量,以此类推。

谢谢。但是,如果我希望从一个窗口输入的文本在两个窗口中都显示,我可以使用static吗?我将删除按钮的静电干扰。:)不,任何GUI组件,如JTextField,都会持有对其父级的引用,并且只能是一个。您可以添加一个更改侦听器,并将新值传递给包含这两个GUI类的控制器对象,然后将该新值传递给另一个类。这就是所谓的MVC,模型Vieew控制器,模式。最好保存JFrames,并为其提供
public void updateText(字符串newValue)