2012-05-04 2 views
2

Есть ли способ получить значение собственности, которое мы объявили таким образом?JButton добавляет свойства

JButton button = new javax.swing.JButton(){ 
    public int value=0; 
} 

button.addActionListener(listener); 
//in action listener 
public void ActionPerformed(ActionEvent evt){ 

JButton btn = (JButton)evt.getSource(); 
btn.value =2; //error 
} 
+2

actionPerformed строчный, обязательный. Отступы будут прекрасными. –

ответ

4

Вы не можете получить доступ к свойствам/методам анонимного класса вне самого экземпляра.

Причина в том, что компилятор знает, что btn - это JButton, а не расширение, и вы не можете использовать это расширение, так как оно не имеет имени.

Вам нужно создать внутренний класс или класс в отдельный файл и создать его экземпляр, например:

static class MyButton extends JButton { 
    public int value=0; 
} 

// .... 
MyButton btn = new MyButton(); 
btn.addActionListener(listener); 
// .... 

@Override public void actionPerformed(ActionEvent evt){ 
    MyButton btn = (MyButton)evt.getSource(); 
    btn.value = 2; 
} 
+0

Спасибо. Im совершенно новый в этом, и я никогда не видел статический класс, который расширяет другой класс. Что это изменит в этом случае? – user1306777

+1

Использование ключевого слова static выполняется, если это внутренний класс, чтобы избежать создания самого класса для каждого экземпляра. Главное изменение заключается в том, что теперь у нас есть имя для такого класса, который мы не использовали, поэтому мы можем ссылаться на его свойства. – MByD

0

Что вы можете сделать, это использовать Component.setName(), чтобы спасти по крайней мере строку с вашим Компонент.

Смежные вопросы