jpanel.add (component) не работает, когда внутри actionListener - PullRequest
0 голосов
/ 01 декабря 2019

В настоящее время я все еще изучаю это заклинание, называемое свингом, поэтому я написал этот код

    lblWarning = new JLabel("<html>Incorrect Username or Password<br/>   please try again!</html>");
        lblWarning.setBounds(10,121,220,48);
        lblWarning.setForeground(new Color(150, 0, 0));
        lblWarning.setBackground(new Color(255, 255, 255));
        lblWarning.setFont(new Font("Tahoma", Font.BOLD, 12));



        JButton btnNewButton_1 = new JButton("Confirm");
        btnNewButton_1.setFont(new Font("Microsoft JhengHei", Font.BOLD, 14));
        btnNewButton_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {

                if(txtUsername.getText()!="user" && txtPassword.getText()!="pass") {
                    contentPane.add(lblWarning);
                }else {

                }
            }
        });
        btnNewButton_1.setBounds(10, 180, 94, 23);
        contentPane.add(btnNewButton_1);

txtusername и txtpassword - текстовые поля между прочим. но проблема в том, что contentPane (jpanel) не добавляет метку "lblWarning", когда условия выполняются, но работает и хорошо работает, когда он находится вне actionListener, в чем проблема?

1 Ответ

1 голос
/ 01 декабря 2019
  1. Откуда вы знаете, что ваше "если условие" когда-либо выполняется? Делали ли вы базовую отладку, добавляя оператор System.out.println(...), чтобы убедиться, что вы выполняете код внутри оператора?

  2. Не используйте "==" или "! =" Для сравнениястрока. Вместо этого используйте метод String.equals(...).

  3. После добавления компонента в видимый фрейм необходимо также вызвать panel.revalidate(), чтобы вызвать диспетчер компоновки, чтобы компоненту был присвоен размер. /location.

...