使用其他帐户登录时禁用 JButton



我正在尝试禁用一些具有不同帐户(例如权限(的JButton,这是我的代码,以更清楚地说明问题...

try
    {
        stat = conn.prepareStatement(sql);
        rs=stat.executeQuery();
        while(rs.next())
        {
           System.out.println("found");
           String _name= rs.getString("name");
           String _pass = rs.getString("password");
           String _stat = rs.getString("status");
            if (_name == name && pass == _pass && _stat == "admin")
            {
                new SecondFrame().setVisible(true);//all buttons works as admin
            }  
            else if(_name == name && pass == _pass && _stat == "moderator")
            {
               SecondFrame ob = new SecondFrame();
               ob.admin_btn.setEnabled(false);//just user+moderator button works
            }
            else if(_name == name && pass == _pass && _stat == "user")
            {
                SecondFrame ob = new SecondFrame();
                ob.admin_btn.setEnabled(false);
                ob.moderator_btn.setEnabled(false);
                // just user button works
            }
        }           
    } 
    catch (SQLException SQLe)
    {
        System.out.println("not executed"+SQLe);
    }

。但是我不能禁用这样的按钮(语法错误(,有没有办法从这个类中禁用按钮?

感谢您的帮助

1. 字符串比较错误

您的主要错误是将字符串与代码中的==进行比较。在Java中,这个比较器只能与longdoubleboolean等基本类型正常工作,因此:使用_stat.equals("moderator")

==不起作用的原因是它比较对象的内存地址而不是内部值。

这是您可以使用的代码:

try {
    stat = conn.prepareStatement(sql);
    rs=stat.executeQuery();
    while(rs.next()) {
        System.out.println("found");
        String _name= rs.getString("name");
        String _pass = rs.getString("password");
        String _stat = rs.getString("status");
        if (_name.equals(name) && pass.equals(_pass) && _stat.equals("admin")) {
            new User().setVisible(true);//all buttons works as admin
        } else if(_name.equals(name) && pass.equals(_pass) && _stat.equals("moderator")) {
            SecondFrame ob = new SecondFrame();
            ob.admin_btn.setEnabled(false);//just user+moderator button works
        } else if(_name.equals(name) && pass.equals(_pass) && _stat.equals("user")) {
            SecondFrame ob = new SecondFrame();
            ob.admin_btn.setEnabled(false);
            ob.moderator_btn.setEnabled(false);
            // just user button works
        }
    }           
} catch (SQLException SQLe) {
    System.out.println("not executed"+SQLe);
}

2. 访问相关问题

之后,您的代码可能仍然无法正常工作,因为您可能遇到访问问题。检查SecondFrame类的按钮属性是否public 。如果不是,则最好创建一个方法,该方法将在该类中设置为具有用户访问权限的启用。像这样:

public void setButtonAccess (String pAccess) {
    user_button.setEnabled(false);
    moderator_btn.setEnabled(false);
    admin_btn.setEnabled(false);
    if (pAccess.equals("user")) {
        user_btn.setEnabled(true);
    } else if (pAccess.equals("moderator")) {
        user_btn.setEnabled(true);
        moderator_btn.setEnabled(true);
    } else if (pAccess.equals("admin")) {
        user_button.setEnabled(true);
        moderator_btn.setEnabled(true);
        admin_btn.setEnabled(true);
    } 
}

尽管使用enum非常适合这种情况......但欲了解更多信息,我建议阅读以下内容:

  1. Java 中的枚举类型
  2. 开关语句

最新更新