java在另一个类中从JTextField编辑JLabel
我环顾四周,但似乎没有什么能帮我。基本上,我正在用gui编写一个多线程聊天程序。用户在登录类的文本字段中输入自己的名字,然后点击登录按钮,将其指向ClientGUI类。在客户端GUI类的顶部有一个JLabel,上面写着
"Welcome to the ChatSystem (Username)"
。因此,登录类中文本字段中的用户输入应该在“欢迎使用聊天系统”之后出现在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,而不是一个字符串,但我已经尝试了很多方法来做到这一点,我似乎无法理解这一点
# 1 楼答案
基本上,您应该使用Observer Pattern,它允许
ClientGUI
在某些内容发生变化时向相关方生成事件这将使代码解耦,并防止
ClientGUI
做不应该做的事情(例如移除标签或其父组件)如果你需要的话,你可以使用一些内置的监听器,但是对于这样的事情,我更喜欢使用我自己的
然后您可以将侦听器的实例添加到
ClientGUI
或者类似的东西
# 2 楼答案
这样做是行不通的,因为
login.usernameTF.getText();
实际上是在ClientGUI构造函数中创建的新对象我建议做的是重载构造函数,并将名称作为参数传递
例如:
然后是ClientGUI类:
# 3 楼答案
swings组件在默认情况下是私有的,只需几步就可以将其公开 1.转到组件的属性,然后转到代码选项卡 2.你会发现变量修饰符是私有的,如果你想的话,可以将它们公开,也可以是静态的。
现在,您将能够使用具有相同代码的组件