通过 JButton 上的事件侦听器更改变量值
Change variable value through event listener on JButton
这是一个非常菜鸟的问题,但我无法解决。我有一个 JButton
和一个变量。简而言之,单击按钮时需要更改变量的值。这是行不通的,因为 event listener
中的变量只能采用 final
变量。问题是,变量需要改变,所以它不能是 final
。我读过一些书并试图让 count
成为一个 class 变量,但是 static
与 not-static
存在问题。这是我所拥有的一个简单版本:
public static void main(String[] args) {
int count = 0;
JFrame frame = new JFrame("Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(null);
panel.setBackground(Color.WHITE);
frame.add(panel);
panel.setSize(frame.getSize());
JButton button = new JButton("Click Me");
button.setBounds(50,50,100,50);
panel.add(button);
JLabel counter = new JLabel(""+count);
counter.setBounds(50,100,100,50);
panel.add(counter);
frame.setSize(500,500);
frame.setVisible(true);
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
count++;
counter.setText(""+count);
}
});
}
我得到的确切错误是:
local variables referenced from an inner class must be final or effectively final.
final int count = 0;
看看这个post
Why are only final variables accessible in anonymous class?
如果您将事件侦听器中的项目声明为全局静态变量,则可以像这样完成此操作:
private static int count = 0;
private static JLabel counter;
public static void main(String[] args) {
...
}
然后从主块中删除声明,即:
int count = 0;
变为 count = 0;
和:
JLabel counter = new JLabel(""+count);
counter.setBounds(50,100,100,50);
panel.add(counter);
变为:
counter = new JLabel(""+count);
counter.setBounds(50,100,100,50);
panel.add(counter);
这将允许按钮的动作侦听器访问值并更改它们。在声明它们的地方(计数器会抛出相同的问题)final 不允许主动更改和递增它们的值。
这是一个非常菜鸟的问题,但我无法解决。我有一个 JButton
和一个变量。简而言之,单击按钮时需要更改变量的值。这是行不通的,因为 event listener
中的变量只能采用 final
变量。问题是,变量需要改变,所以它不能是 final
。我读过一些书并试图让 count
成为一个 class 变量,但是 static
与 not-static
存在问题。这是我所拥有的一个简单版本:
public static void main(String[] args) {
int count = 0;
JFrame frame = new JFrame("Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(null);
panel.setBackground(Color.WHITE);
frame.add(panel);
panel.setSize(frame.getSize());
JButton button = new JButton("Click Me");
button.setBounds(50,50,100,50);
panel.add(button);
JLabel counter = new JLabel(""+count);
counter.setBounds(50,100,100,50);
panel.add(counter);
frame.setSize(500,500);
frame.setVisible(true);
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
count++;
counter.setText(""+count);
}
});
}
我得到的确切错误是:
local variables referenced from an inner class must be final or effectively final.
final int count = 0;
看看这个post
Why are only final variables accessible in anonymous class?
如果您将事件侦听器中的项目声明为全局静态变量,则可以像这样完成此操作:
private static int count = 0;
private static JLabel counter;
public static void main(String[] args) {
...
}
然后从主块中删除声明,即:
int count = 0;
变为 count = 0;
和:
JLabel counter = new JLabel(""+count);
counter.setBounds(50,100,100,50);
panel.add(counter);
变为:
counter = new JLabel(""+count);
counter.setBounds(50,100,100,50);
panel.add(counter);
这将允许按钮的动作侦听器访问值并更改它们。在声明它们的地方(计数器会抛出相同的问题)final 不允许主动更改和递增它们的值。