2011-12-14 3 views
0

У меня есть раздражающее окно сообщений, которое появляется, когда я этого не хочу. проблема возникает после входа пользователя в систему, и скрытая кнопка видна, но когда ее нажимают, она снова показывает «правильное» сообщение? Ive также попытался поставить его поверх первого утверждения и нижней части. EDIT: Раздражает сообщение не является сообщением, которое приходит после успешного входа в систему, и нет, я не нужно проверять орфографию,Свинг if else statement

class MyWindowListener extends WindowAdapter { 

    public void windowClosing(WindowEvent e) { 
     System.out.println("Closing window!"); 
     System.exit(0); 

    } 
} 
class LoginForm extends JFrame implements ActionListener { 

    private final String username = "user"; 
    private final String password = "pass"; 
    JFrame frame; 
    JPanel jPanel; 
    JLabel userLabel; 
    final JTextField userText; 
    JLabel passLabel; 
    final JPasswordField passText; 
    JButton loginBtn; 
    JButton shopBtn; 
    JLabel welcome; 

    { 

     frame = new JFrame(); 
     jPanel = new JPanel(); 
     userLabel = new JLabel("Login : "); 
     userText = new JTextField(10); 
     passLabel = new JLabel("Password : "); 
     passText = new JPasswordField(10); 
     loginBtn = new JButton("Login"); 
     shopBtn = new JButton("Go to Shop"); 
     welcome = new JLabel("Welcome to ECSE501 Computers"); 
     setTitle("Login Page"); 
     loginBtn.addActionListener(this); 
     shopBtn.addActionListener(this); 


     Container c1 = new Container(); 
     c1.setLayout(new GridLayout (3,2)); 
     c1.add(userLabel); 
     c1.add(userText); 
     c1.add(passLabel); 
     c1.add(passText); 
     c1.add(loginBtn); 

     Container c2 = new Container(); 
     c2.setLayout(new BoxLayout(c2, BoxLayout.Y_AXIS)); 
     c2.add(welcome); 
     c2.add(shopBtn); 
     welcome.setVisible(false); 
     shopBtn.setVisible(false); 

     add(jPanel); 
     jPanel.add(c1); 
     jPanel.add(c2); 

    } 

    public void actionPerformed(ActionEvent e) { 

     String userInput = userText.getText(); 
     char[] pass = passText.getPassword(); 
     String p = new String(pass); 



     if (userInput.equals(username) && p.equals(password)) { 
      jPanel.setVisible(true); 
      welcome.setVisible(true); 
      jPanel.setBackground(Color.green); 
      JOptionPane.showMessageDialog(null, "Correct"); 
      shopBtn.setVisible(true); 
      JButton hiddenBtn = (JButton) e.getSource(); 
     if (hiddenBtn == shopBtn) 
     { 
      SelectionForm selection = new SelectionForm(); 
      selection.select(); 
     } 
     } 
     else { 
      jPanel.setBackground(Color.red); 
      JOptionPane.showMessageDialog(null, "Wrong Login Details"); 

     } 


    } 
} 
public class LoginTester { 

    public static void main(String[] args) { 

     // register an event handler for frame events 
     LoginForm frame = new LoginForm(); 
     frame.addWindowListener(new MyWindowListener()); 
     frame.setSize(300, 200); 
     frame.setVisible(true); 

     //frame.pack(); 
     } 
    } 
+0

Можете ли вы предоставить полную программу, которую, похоже, вы называете этим fuction в цикле! (как основная часть) – StackFlowed

+5

1) Для лучшей помощи, скорее всего, опубликуйте [SSCCE] (http://sscce.org/). 2) * '" Corerect "' * Неверно. Используйте проверку орфографии. 3) Каков точный текст * «раздражающего сообщения» *? –

+1

'' Corerect''? Я бы разозлился, если бы это появилось на мне. Извините, не смог удержаться от иронии. –

ответ

5

Вы кладете все это в вашем методе actionPerformed. Это вызывается всякий раз, когда выполняется какое-либо действие, нажимается кнопка, редактируется текстовое поле и т. Д.

Если вы не хотите, чтобы это выполнялось при нажатии кнопки, проверьте источник события , используя getSource(), и если источником является кнопка, то не запускайте код. Ваш метод будет выглядеть так:

public void actionPerformed(ActionEvent e) { 
     String userInput = userText.getText(); 
     char[] pass = passText.getPassword(); 
     String p = new String(pass); 

     if(e.getSource().equals(loginBtn)) { 

      if (userInput.equals(username) && p.equals(password)) { 

       jPanel.setVisible(true); 
       welcome.setVisible(true); 
       jPanel.setBackground(Color.green); 
       JOptionPane.showMessageDialog(null, "Correct"); 
       shopBtn.setVisible(true); 
       JButton hiddenBtn = (JButton) e.getSource(); 
      } 

      else { 
       jPanel.setBackground(Color.red); 
       JOptionPane.showMessageDialog(null, "Wrong Login Details"); 
      } 
     } 

     else if (e.getSource().equals(shopBtn)) { 

      SelectionForm selection = new SelectionForm(); 
      selection.select(); 

     } 
} 
+0

при каждом нажатии кнопки «Перейти в магазин»/shopBtn отображается сообщение снова. –

+0

Возможно, это потому, что я использовал «! =» Вместо! Equals(). Я изменю это. Если после этого изменения он не работает, замените JOptionPane.showMessageDialog (null, «Corerect»); с JOptionPane.showMessageDialog (null, e.getSource()); чтобы увидеть, как это называется. – eboix

+0

Я действительно не объяснил это должным образом, потому что я очень устал. Я хочу, чтобы сообщение открывалось, но onlu один раз, после того, как у пользователя есть успешный логин. Затем отобразится скрытая кнопка, и когда она будет нажата, откроется новый кадр и снова отобразится «правильное» сообщение, которое я не хочу. –