我有这个大型的多类应用程序,而且我有alogin系统。 因此,在用户登录文本后,#34;欢迎,访客"应该更新做"欢迎,用户名"。我的方法" logininfo"是处理它的人,它使用方法setText()。你可以在这里看到这个方法:
public void loginInfo(String userName) {
lblWelcomeGuest.setText("Welcome, "+userName);
System.out.println(lblWelcomeGuest.getText());
}
GUI显示"欢迎,访客",而我的调试消息打印"欢迎,Fillefixsweden"。我不知道问题是什么,也许我需要刷新?请帮忙!
请求注释,整个代码(不含导入):
public class MainGUI extends JFrame{
private static final long serialVersionUID = 1L;
LogIn login= new LogIn();
private JLabel lblWelcomeGuest = new JLabel("Welcome, Guest");
public String uName;
private JLabel lblLogIn = new JLabel("Log in");
LoginUI loginui = new LoginUI();
public void initialize() {
lblLogIn.setFont(new Font("Tahoma", Font.PLAIN, 14));
lblLogIn.setForeground(Color.WHITE);
lblLogIn.setBounds(842, 118, 128, 14);
lblWelcomeGuest.setBounds(10, 116, 133, 16);
lblWelcomeGuest.setFont(new Font("Tahoma", Font.PLAIN, 13));
lblWelcomeGuest.setForeground(Color.WHITE);
getContentPane().add(lblWelcomeGuest);
getContentPane().add(lblLogIn);
}
public void loginInfo(String userName) {
lblWelcomeGuest.setText("Welcome, "+userName);
lblLogIn.setText("Log out");
System.out.println(lblWelcomeGuest.getText());
}
}
这是完整的主类:
public class Main {
MainGUI gui;
public String username;
public Main() {
System.out.println("Main constructor");
gui = new MainGUI();
gui.initialize();
gui.setVisible(true);
}
public static void main(String[] args) {
System.out.println("Main");
new Main();
}
}
这是调用loginInfo()(另一个类)的方法:
public void cred(String name, String password){
if(new SQL().validate(name, password)){
System.out.println("Logged in");
CloseFrame();
new MainGUI().loginInfo(name);
}else{
System.out.println("Credentials does not match!");
System.out.println(name+" "+password);
}
}
答案 0 :(得分:1)
每次调用new MainGUI()
时,您都会创建一个与所有其他实例完全唯一的新的不同实例(对象)。您只需调用一次即可创建可见的GUI,然后再创建另一个,以便像我们怀疑的那样调用您的loginInfo()
方法。解决方案 - 仅创建一个 MainGUI实例并从中调用所有相关方法。
答案 1 :(得分:0)
没关系,自己解决了。
我在另一个覆盖受影响的GUI的类中创建了一个新的GUI实例。解决方法是不创建新实例但使用旧实例。