我已经想出了一个 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/