首页 > 解决方案 > 为什么我的 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(); 
    }

}

我对这为什么有效并且非常迷茫感到非常惊讶。提前感谢您的任何答案。

标签: java

解决方案


推荐阅读