Вы можете объявить закрытый вложенный класс, например так:
public class CustomizedButton extends Button{
String customClass;
CustomizedButton(String stringToPrint){
super(customClass); //customClass is also button name
this.customString = stringToPrint;
addActionListener(new MyListener());
}
private class MyListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO: listener code here
}
}
}
Но это не сильно отличается от использования анонимного внутреннего класса или лямбды:
public class CustomizedButton extends Button{
String customClass;
CustomizedButton(String stringToPrint){
super(customClass); //customClass is also button name
this.customString = stringToPrint;
addActionListener(e -> myListenerCode(e));
}
private void myListenerCode(ActionEvent e) {
// TODO: listener code here
}
}
Сказав это,на ум приходят другие вопросы:
- Обычно лучше отдать предпочтение композиции, а не наследованию.Могу поспорить, что вы действительно хотите, это какой-то фабричный метод, который создает вашу кнопку в комплекте со слушателем
- Зачем использовать компоненты AWT, такие как класс java.awt.Button, когда он равен 20+ устарели?Почему бы не использовать Swing JButtons вместо этого?
- Если бы вы использовали Swing JButtons, лучше было бы создать собственное действие, а не расширять JButton.Действия могут содержать и изменять многие свойства кнопок, включая прослушиватель, отображаемый текст, значки, текст всплывающей подсказки (отображается при наведении курсора) ....
- В этом отношении вам следует отдать предпочтение JavaFX, если этоновый проект, поскольку это текущая наиболее поддерживаемая библиотека графического интерфейса Java.
Например, класс AbstractAction может выглядеть примерно так:
public class CustomizedAction extends AbstractAction{
String text;
CustomizedAction(String text, int mnemonic){
super(text); //text is also button name
this.text = text;
putValue(MNEMONIC_KEY, mnemonic); // for alt-key short cut if desired
}
@Override
public void actionPerformed(ActionEvent e) {
String currentName = getValue(NAME); // same value as the text field
System.out.println(currentName);
// TODO: more listener code here
}
}
и может использоваться следующим образом:
JButton button = new JButton(new CustomizedAction("Foo", KeyEvent.VK_F));