JLabel.setText没有更新文本,但getText()返回新文本?

时间:2015-04-11 15:37:10

标签: java swing awt settext

我有这个大型的多类应用程序,而且我有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);

    }
}

2 个答案:

答案 0 :(得分:1)

每次调用new MainGUI()时,您都会创建一个与所有其他实例完全唯一的新的不同实例(对象)。您只需调用一次即可创建可见的GUI,然后再创建另一个,以便像我们怀疑的那样调用您的loginInfo()方法。解决方案 - 仅创建一个 MainGUI实例并从中调用所有相关方法。

答案 1 :(得分:0)

没关系,自己解决了。

我在另一个覆盖受影响的GUI的类中创建了一个新的GUI实例。解决方法是不创建新实例但使用旧实例。