Создать JLabel в действииПроизводится в Java - PullRequest
1 голос
/ 29 января 2012

Привет, у меня есть JButton, который я хочу запрограммировать, чтобы при нажатии на экране отображалась новая JLabel. Я добавил JLabel в рамку, и она видна. Показывается за пределами actionPerformed, но не внутри него.

Метка объявляется как lbl вне метода, а затем создается в методе actionPerformed

    public void actionPerformed(ActionEvent e) {

        JLabel lbl = new JLabel("ONE");
}

Кто-нибудь может мне помочь, чтобы ярлык появлялся при нажатии кнопки? Спасибо

Ответы [ 3 ]

3 голосов
/ 29 января 2012

Вот как вы это делаете:

  public void actionPerformed(ActionEvent e) {
    if (e.getSource() == buttonname){ 
        labelname.setVisible(true);

    }
}

Кроме того, не забудьте сделать

buttonname.addActionListener(this);

, и в вашем методе, где вы размещаете форму, добавьте следующее:

yourPanel.Add(labelname)

Надеюсь, это поможет!

Арно

1 голос
/ 29 января 2012

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

JLabel lbl = new JLabel("ONE");
yourPanel.Add(lbl);
1 голос
/ 29 января 2012

Вы также объявили его внутри метода actionPerformed - возможно, это объявление скрывает предыдущее (вне метода).Вы можете разместить больше кода?Следующий код прекрасно работает для меня:

public class NewLabel
{
    public static void main(String[] args)
    {

        final JFrame frame = new JFrame();

        JButton button = new JButton("Add label");

        button.addActionListener(new ActionListener()
        {

            public void actionPerformed(ActionEvent e)
            {

                JLabel lbl = new JLabel("ONE");
                frame.add(lbl);

                frame.setSize(100, 100);
                // or you can't see the new button without resizing manually!
            }
        });

        frame.add(button);
        frame.pack();
        frame.setVisible(true);

    }
}

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

...