Изменение текста JLabel и статуса JMenuItem во время выполнения - PullRequest
1 голос
/ 13 августа 2011

Я разрабатываю приложение, в котором я хотел бы отобразить имя пользователя в верхней части экрана после того, как пользователь вошел в систему.Также мне нужно включить пять JMenuItems только после того, как пользователь вошел в систему. Я использовал следующий код и вызвал его из условия успешного входа в систему, но это не меняет приложения.

ПРИМЕЧАНИЕ: -Имя пользователя должно отображаться в 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 голосов
/ 21 октября 2011

Я бы порекомендовал иметь одну переменную, чтобы отслеживать, вошел ли пользователь в систему или нет, а затем связать ваши компоненты соответствующим образом.

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