java - 基本 GUI : Computing for the area and perimeter of a rectangle, 代码有效,但 "variables are never read"

标签 java swing user-interface

我已经想出了一个 GUI 代码,可以在用户输入长度和宽度时计算矩形的面积和周长:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class RectangleGUI extends JFrame {

    JLabel lengthL;
    JLabel widthL;  
    JLabel areaL;   
    JLabel perimeterL;

    JTextField lengthTF;
    JTextField widthTF;
    JTextField areaTF;
    JTextField perimeterTF;

    JButton CalculateB;
    JButton ExitB;

    CalculateButtonHandler cbHandler;
    ExitButtonHandler ebHandler;

    public RectangleGUI() 

    {
        setTitle("Area and Perimeter of a Rectangle");

        lengthL = new JLabel("Enter the length: ", JLabel.RIGHT);
        widthL = new JLabel ("Enter the width: ", JLabel.RIGHT);
        areaL = new JLabel ("Area: ", JLabel.RIGHT);
        perimeterL = new JLabel ("Perimeter: ", JLabel.RIGHT);

        lengthTF = new JTextField(10);
        widthTF = new JTextField (10);
        areaTF = new JTextField (10);
        perimeterTF = new JTextField (10);

        CalculateB = new JButton("Calculate");
        cbHandler = new CalculateButtonHandler();
        CalculateB.addActionListener(cbHandler);

        ExitB = new JButton("Exit");
        ebHandler = new ExitButtonHandler();
        ExitB.addActionListener(ebHandler);

        Container pane = getContentPane();
        pane.setLayout(new GridLayout(5,2));

        pane.add(lengthL);
        pane.add(lengthTF);
        pane.add(widthL);
        pane.add(widthTF);
        pane.add(areaL);
        pane.add(areaTF);
        pane.add(perimeterL);
        pane.add(perimeterTF);
        pane.add(CalculateB);
        pane.add(ExitB);

        setSize(400,300);
        setVisible(true);
    }

    public class CalculateButtonHandler implements ActionListener {

        public void actionPerformed (ActionEvent e)
            {
        double l, w, area, peri;

        l=Double.parseDouble(lengthTF.getText());
        w=Double.parseDouble(widthTF.getText());

        area=l*w;
        peri=2*(l+w);

        areaTF.setText("" + area);
        perimeterTF.setText("" + peri);
            }
    }

    public class ExitButtonHandler implements ActionListener {

        public void actionPerformed (ActionEvent e)
            {
            System.exit(0);
            }
        }

    public static void main(String[] args) {

        RectangleGUI rectObject = new RectangleGUI();

    }

}

这段代码应该在控制台上运行,但它让我感到不安,因为在 Eclipse 上,public class RectangleGUI extends JFrame { 中的 RectangleGUI 带有黄色波浪线下划线,因为“​​The可序列化类 RectangleGUI 未声明 long 类型的静态最终 serialVersionUID 字段。

在代码的后半部分,rectObject 也带有下划线,因为该变量显然是“从未读取过”。我知道我应该在某个时候使用这个变量,但是当我尝试这样做时,代码会搞砸并且不会再工作。

我想了解为什么会这样。我只是一个初学者,我希望将来能够避免这些错误。

另外:在运行时,我尝试不在“宽度”文本字段中输入值,Eclipse 控制台返回一条错误消息。我该怎么做,而不是 Eclipse 提醒我有问题,一个 GUI 提示将弹出告诉我在“宽度”中输入一个值?我试过一次又一次地失败。

这不是家庭作业,但我是第一次发现 GUI,非常感谢了解为什么错误会以这种方式出现。谢谢!

最佳答案

关于rectObject由于未被读取而被下划线的问题,那是因为你实际上从未对该rectObject进行任何方法调用或在创建后在代码中使用它。当 Eclipse 说该变量“未读取”时,这意味着您在创建它后就不会使用它。一个简单但不是很好的解决方案是您可以从构造函数中删除 setVisible(true) 方法调用,然后从 main() 中调用它。

public static void main(String[] args) {
    RectangleGui rectObject = new RectangleGui();
    rectObject.setVisible(true);
}

这将使用变量 rectObject 一次,您的警告消息应该会消失。至于 serialVersionUID,你可以在你的类声明之后添加这一行。

static final long serialVersionUID = 1;

您可以根据需要随意设置实际数字。 JFrames 是 Frame 类的扩展,它实现了使用此 ID 的 Serializable 接口(interface)。因为您的类也是这些类的扩展,所以强烈建议为您的新类提供此操作的 ID。

希望至少对您有所帮助。另外,作为免责声明,我还没有测试过这些。 :)

关于java - 基本 GUI : Computing for the area and perimeter of a rectangle, 代码有效,但 "variables are never read",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20462331/

相关文章:

java - 如何在 Swing 中停止重复的 keyPressed()/keyReleased() 事件

java - 如何检查 JButton 是否已按下?如果 isEnable() 不起作用?

java - SWT Tree - 可以降低 native 展开图标吗?

jQuery UI 选项卡后退按钮历史记录

java - Spring MVC 使用GenerateKeyHolder() - java.io.NotSerializedException

java - 处理大型 HashMap 的内存高效方式

java - 取消之前的请求

java - 返回 Java 数组与集合

java - Java 中的关键事件 - 初学者帮助

ios - 如何使按钮幻灯片像 UITableView 删除确认按钮一样显示?