【问题标题】:Changing the text of a JLabel and status of JMenuItem during runtime在运行时更改 JLabel 的文本和 JMenuItem 的状态
【发布时间】:2011-08-13 10:35:36
【问题描述】:

我正在开发一个应用程序,我想在用户登录系统后在屏幕顶部显示用户名。另外我只需要在用户登录后启用五个 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 ");

非常感谢任何帮助

提前谢谢大家!!!

【问题讨论】:

  • “非常感谢任何帮助” 任何SSCCE 都可能会被仔细检查。
  • @Andrew 我实际上并不知道您指的是什么,但无论如何我给出的代码尽管很长但有必要解释我的问题是什么
  • 您没有包含太多代码,但您不一定包含构成 SSCCE 的所有相关部分。例如,obj2 的类类型及其类变量声明。我认为这也是@Andrew 所指的。对于您的 NPE,obj2 似乎为空,但我真的无法从您显示的代码中说出原因。
  • @Yoosuf “尽管它很长” 一个 SSCCE 很容易就是 100 行代码(即比你包含的更多的代码)。 SSCCE 将为我们提供确定obj2 是什么以及为什么它是null 所需的所有信息。 (注意,我从@Perception 的评论中推断出最后的部分——我没有尝试破译代码 sn-ps。)
  • 对不起,实际上我浏览了 SSCCE 链接,我还编辑了上述问题,并包含了 obj2 类以及我需要它的原因。谢谢

标签: java swing dynamic jlabel jmenuitem


【解决方案1】:

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

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;
}

【讨论】:

    猜你喜欢
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 2023-03-07
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多