在运行时更改JLabel的文本和JMenuItem的状态

时间:2011-08-13 10:35:36

标签: java swing dynamic jlabel jmenuitem

我正在开发一个应用程序,我希望在用户登录系统后在屏幕顶部显示用户名。此外,我只需要在用户登录后启用五个JMenuItems。我使用以下代码并从成功登录If调用它,但它根本不会更改应用程序。

注意: - 用户名将显示在JFrame中,登录表单是JInternalFrame 所有JMenuItems也在JFrame

obj2是为LoginModel类创建的对象,用于检索用户名

private String global_username="";
public String getGlobalUsername(){
    return global_username;
}

我调用的方法是更改​​JMenuItems的状态并设置JLabel的值

public void disableMenues(){
        mntmSupplierManagement.setEnabled(false);
        mntmEmployeeManagement.setEnabled(false);
        mntmStockManagement.setEnabled(false);
        mntmReporting.setEnabled(false);
        mntmTransaction.setEnabled(false);
        userName.setText("Logged in as "+obj2.getGlobalUsername());
}

我在JInternalFrame(登录表单)中使用了以下代码,以便在用户登录后调用上述方法

 if(username.equals(user)&&password.equals(pass)){
        System.out.println("Logged into the system");
        global_username=username;
        accountType=acc;
        updateView();
else{
        System.out.println("Unsuccessful login");                            
        updateView();
}

我还使用以下代码创建了JLabel

JLabel userName=new JLabel();
userName.setText("Logged in as "+obj2.getGlobalUsername());

这给了我一个NullPointerException,所以我把它改成了

userName.setText("Logged in as ");

任何帮助都得到了极大的赞赏

先谢谢所有人!!!

1 个答案:

答案 0 :(得分:0)

我建议使用单个变量来跟踪用户是否已登录,然后适当地绑定组件

private boolean loggedIn = false;

public void disableMenues(){
    mntmSupplierManagement.setEnabled(!loggedIn);
    mntmEmployeeManagement.setEnabled(!loggedIn);
    mntmStockManagement.setEnabled(!loggedIn);
    mntmReporting.setEnabled(!loggedIn);
    mntmTransaction.setEnabled(!loggedIn);
    userName.setText("Logged in as "+obj2.getGlobalUsername());
}

我还建议在整个会话中跟踪LoginModel类

private LoginModel lm = null;

private void authenticate(String username, String password){
    //check username password (database maybe)
    //and return the LoginModel for the pair
    lm = returnedLoginModel;
}

然后在JFrame中你所要做的就是

if(lm != null){
    System.out.println("Logged into the system");
    loggedIn = true;
    updateView();
else{
    System.out.println("Unsuccessful login");
    loggedIn = false;                            
    updateView();
}

请记住,您还必须跟踪退出

private void logout(){
    lm = null;
}