java - 为什么我的 Java 变量需要以这种方式实现?
问题描述
我正在学习Java。我正在煞费苦心地学习 Java GUI 的基础知识。我制作了一个“计数器”程序,每次单击按钮时都会将变量增加 1。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class guitry implements ActionListener {
int counter = 0;
public guitry() {
JFrame frame = new JFrame("FrameDemo");
JPanel panel = new JPanel(new FlowLayout(1));
JLabel label = new JLabel("Clicked " + counter + " times");
JButton button = new JButton("CLick me");
panel.add(button);
panel.add(label);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
System.out.println(panel.getLayout());
button.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
counter++;
System.out.println("clicked");
label.setText("Clicked " + counter + " times");
}
public static void main(String[] args) {
new guitry();
}
}
此代码在动作侦听器的第 27 行因“找不到符号”而失败。
label.setText("Clicked " + counter + " times");
在偶然发现一个与我处理相同任务的示例后,它在声明中执行此操作,因此动作侦听器可以工作:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class guitry implements ActionListener {
int counter = 0;
JLabel label; <----------------------------------------
public guitry() {
JFrame frame = new JFrame("FrameDemo");
JPanel panel = new JPanel(new FlowLayout(1));
label = new JLabel("Clicked " + counter + " times"); <----------------------
JButton button = new JButton("CLick me");
panel.add(button);
panel.add(label);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
System.out.println(panel.getLayout());
button.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
counter++;
System.out.println("clicked");
label.setText("Clicked " + counter + " times");
}
public static void main(String[] args) {
new guitry();
}
}
我对这为什么有效并且非常迷茫感到非常惊讶。提前感谢您的任何答案。
解决方案
推荐阅读
- node.js - 你应该/可以运行在 Azure 上运行的 Node-OPCUA 服务器吗?
- javascript - 我可以从我的服务器发送一个可以通过浏览器扩展访问的 cookie 吗?
- android - 在 Android 中为两个活动使用一个处理程序?
- c++ - 为什么它只能读取第一行?
- ios - 错误 ITMS-9000:“不支持的架构。您的可执行文件包含不受支持的架构 '[x86_64, i386]'”,发生错误
- sql - 使用包含 SELECT 语句的 IF/ELSE 设置变量
- c# - 基于通用 TKey 类型生成新的 Id
- c# - 如何在 XamarinForms 中使用 TextFields 创建 DisplayAlert?
- java - 在android中创建计算器菜单
- c# - 如何使用 chechked 方法从 RichTextBox 中删除复选框文本