ButtonHandler1
на самом деле не используется, поскольку передаваемые ему параметры никогда не используются, и его единственный метод переопределяется при его создании. Итак, это:
butSmall.addActionListener(new ButtonHandler1(this, 200){
@Override
public void actionPerformed(ActionEvent actionEvent) {
size = 200;
panel.repaint();
}
});
Может быть написано без построения ButtonHandler1
:
butSmall.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent actionEvent) {
size = 200;
panel.repaint();
}
});
Или с помощью лямбда-выражения:
butSmall.addActionListener(actionEvent -> {
size = 200;
panel.repaint();
});
Есть много способовВы можете достичь желаемой функциональности. Основываясь на том, что вы написали, вы можете определить ButtonHandler1
следующим образом:
class ButtonHandler1 implements ActionListener{
private final FilledFrame theApp;
private final int theSize;
ButtonHandler1(FilledFrame app, int size){
theApp = app;
theSize = size;
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
theApp.size = theSize; //better use a setter in FilledFrame
theApp.repaint();
}
}
И использовать его следующим образом:
butSmall.addActionListener(new ButtonHandler1(this, 200));
butMedium.addActionListener(new ButtonHandler1(this, 300));
butLarge.addActionListener(new ButtonHandler1(this, 400));
Создание ButtonHandler1
внутреннего класса в FilledFrame
делает вещи проще:
class ButtonHandler1 implements ActionListener{
private final int theSize;
ButtonHandler1(int size){
theSize = size;
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
size = theSize;
repaint();
}
}
Используйте его по:
butSmall.addActionListener(new ButtonHandler1(200));
butMedium.addActionListener(new ButtonHandler1(300));
butLarge.addActionListener(new ButtonHandler1(400));