Я пытаюсь освоить программирование на GUI на Java, и в настоящее время у меня есть фрейм, содержащий кнопку и метку. При нажатии кнопки появляется диалоговое окно, в котором говорится, сколько раз была нажата кнопка. Я хочу сделать то же самое для ярлыка, но не могу обновить его, сказав, что на него нажали ноль раз.
Вот код для кнопки:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CountButton extends JButton {
private int counter = 0;
public CountButton(String text) {
super(text);
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
counter++;
JOptionPane.showMessageDialog(null, "You have clicked the button "
+ counter + " times!");
}
});
}
public int getCounter() {
return counter;
}
}
Вот моя попытка реализации:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class LayoutPractice {
public static void main(String[] args) {
JFrame frame = new JFrame("GUI Layout Practice");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1020,700);
JPanel panelOne = new JPanel();
//Button portion of frame
JButton button = new CountButton("Click me for a dialog!");
panelOne.add(button);
JLabel label = new JLabel("The button has been pressed 0 times.");
panelOne.add(label);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
label.setText("The button has been pressed " +
((CountButton) button).getCounter() + " times.");
}
});
frame.add(panelOne, BorderLayout.NORTH);
frame.setVisible(true);
}
}
Редактировать: я изменил код, чтобы добавить событие прослушивателя к кнопке, чтобы при нажатии он изменял текст метки с помощью label.setText (), но теперь моя проблема заключается в том, что нажатие первой кнопки не обновляет его. Обновление начинается только после двойного нажатия, а затем число кликов отстает от фактического количества кликов.