我环顾四周,但似乎没有任何帮助。基本上,我正在使用gui编写多线程聊天程序。用户在Login类的文本字段中输入他的名字,然后单击Login按钮,将其定向到ClientGUI类。在客户端GUI类的顶部,有一个JLabel,上面写着


  “欢迎使用聊天系统(用户名)”


。因此,用户在登录类的文本字段中输入的内容应该在“欢迎使用ChatSystem”之后显示在JLabel中,但是我不知道为什么它不起作用。这是我的代码:

登录类别:

loginB = new JButton("Login");
main.add(loginB);
loginB.addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e) {
        ClientGUI clientgui = new ClientGUI();
        clientgui.setVisible(true);
    }
}


ClientGUI类:

public ClientGUI(){
    Login login = new Login();
    String username = login.usernameTF.getText();
    welcome = new JLabel("Welcome to ChatSystem "+username, SwingConstants.CENTER);

}


我知道用户名实际上应该由JLabel而不是字符串提供,但是我尝试了许多方法来执行此操作,但我似乎无法解决这个问题。

最佳答案

那是行不通的,因为
login.usernameTF.getText();实际上是ClientGUI构造函数中新创建的对象...

我建议做的是重载构造函数并将名称作为参数传递...

例:

 loginB.addActionListener(new ActionListener(){
     @Override
     public void actionPerformed(ActionEvent e) {
     ClientGUI clientgui = new ClientGUI(getTheNameAndpassItHere);
     clientgui.setVisible(true);
            }
        }




然后是ClientGUI类:

public ClientGUI(String username){

    //Login login = new Login();
   // String username = login.usernameTF.getText();

    welcome = new JLabel("Welcome to ChatSystem "+username, SwingConstants.CENTER);

}

10-08 13:44