@roman3847

Что делать, если внутри класса не видны компоненты Swing?

Есть класс, который на панель добавляет Button и TextField. Но когда в ColorAction пытаюсь прописать действия при нажатии на кнопку, компилятор не видит panel, Button, Textfield. В чём ошибка?
class BPanel extends JPanel
{
	public BPanel()
	{
		JButton Button = new JButton("Button_");
		JTextField Text = new JTextField(15);
		
		add(Button);
		add(Text);
			
		ActionListener actionListener = new ColorAction();
		Button.addActionListener(actionListener);		
	}

	protected class ColorAction implements ActionListener
	{
		public void actionPerformed(ActionEvent e) 
		{
			
			JOptionPane.showMessageDialog(panel, "ppppp"); //ошибка, не видит panel

		}
	}
	
}
  • Вопрос задан
  • 2563 просмотра
Пригласить эксперта
Ответы на вопрос 2
Rodgenk
@Rodgenk
Область видимости твоих переменных - метод, внутри которого они определены (конструктор).
Сделай их переменными класса BPanel.
Ответ написан
Комментировать
В данном случае лучше реализовать слушатель в виде анонимного класса или лямбды:

Button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        //Обработка здесь.
    }
});


В данном случае, переменная panel будет видна. Либо, как написал Rodgenk, но у этого подхода есть два недостатка:

1) Избыточность, если данный слушатель используется однажды.
2) Необходимость создания статических полей, а это тоже своего рода избыточность.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы