JLabel和JTextField为什么不用申请Jpanel
时间: 2024-02-02 21:04:35 浏览: 33
JLabel和JTextField是Java Swing组件库中的组件,它们都是直接继承自JComponent,而不是继承自JPanel。因此,使用JLabel和JTextField时不需要先申请JPanel,可以直接将它们添加到任何容器中,如JFrame或JDialog等。但是,如果需要将多个组件组合在一起,可以使用JPanel作为容器来布局它们。
相关问题
编写程序,利用常用组件JButton,Jlabel,JtextField等组件实现如下所示的计算器。
好的,以下是一个简单的计算器GUI程序的代码实现:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class CalculatorGUI extends JFrame implements ActionListener {
// 定义计算器界面中的组件
private JTextField inputField;
private JLabel resultLabel;
private JButton button0;
private JButton button1;
private JButton button2;
private JButton button3;
private JButton button4;
private JButton button5;
private JButton button6;
private JButton button7;
private JButton button8;
private JButton button9;
private JButton buttonPlus;
private JButton buttonMinus;
private JButton buttonMultiply;
private JButton buttonDivide;
private JButton buttonEqual;
private JButton buttonClear;
// 定义计算器操作数和运算符变量
private double num1 = 0;
private double num2 = 0;
private String operator = "";
public CalculatorGUI() {
// 初始化计算器界面
setTitle("Calculator");
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
inputField = new JTextField(12);
inputField.setEditable(false);
inputField.setHorizontalAlignment(JTextField.RIGHT);
resultLabel = new JLabel("0");
resultLabel.setHorizontalAlignment(JLabel.RIGHT);
button0 = new JButton("0");
button1 = new JButton("1");
button2 = new JButton("2");
button3 = new JButton("3");
button4 = new JButton("4");
button5 = new JButton("5");
button6 = new JButton("6");
button7 = new JButton("7");
button8 = new JButton("8");
button9 = new JButton("9");
buttonPlus = new JButton("+");
buttonMinus = new JButton("-");
buttonMultiply = new JButton("*");
buttonDivide = new JButton("/");
buttonEqual = new JButton("=");
buttonClear = new JButton("C");
// 设置计算器界面布局
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new GridLayout(2, 1));
inputPanel.add(inputField);
inputPanel.add(resultLabel);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(4, 4));
buttonPanel.add(button1);
buttonPanel.add(button2);
buttonPanel.add(button3);
buttonPanel.add(buttonPlus);
buttonPanel.add(button4);
buttonPanel.add(button5);
buttonPanel.add(button6);
buttonPanel.add(buttonMinus);
buttonPanel.add(button7);
buttonPanel.add(button8);
buttonPanel.add(button9);
buttonPanel.add(buttonMultiply);
buttonPanel.add(buttonClear);
buttonPanel.add(button0);
buttonPanel.add(buttonEqual);
buttonPanel.add(buttonDivide);
Container contentPane = getContentPane();
contentPane.add(inputPanel, BorderLayout.NORTH);
contentPane.add(buttonPanel, BorderLayout.CENTER);
// 绑定事件监听器
button0.addActionListener(this);
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
button4.addActionListener(this);
button5.addActionListener(this);
button6.addActionListener(this);
button7.addActionListener(this);
button8.addActionListener(this);
button9.addActionListener(this);
buttonPlus.addActionListener(this);
buttonMinus.addActionListener(this);
buttonMultiply.addActionListener(this);
buttonDivide.addActionListener(this);
buttonEqual.addActionListener(this);
buttonClear.addActionListener(this);
pack();
}
public void actionPerformed(ActionEvent e) {
// 处理按钮点击事件
String action = e.getActionCommand();
if (action.equals("C")) {
inputField.setText("");
resultLabel.setText("0");
num1 = 0;
num2 = 0;
operator = "";
} else if (action.equals("+")) {
num1 = Double.parseDouble(inputField.getText());
inputField.setText("");
operator = "+";
} else if (action.equals("-")) {
num1 = Double.parseDouble(inputField.getText());
inputField.setText("");
operator = "-";
} else if (action.equals("*")) {
num1 = Double.parseDouble(inputField.getText());
inputField.setText("");
operator = "*";
} else if (action.equals("/")) {
num1 = Double.parseDouble(inputField.getText());
inputField.setText("");
operator = "/";
} else if (action.equals("=")) {
num2 = Double.parseDouble(inputField.getText());
double result = 0;
switch (operator) {
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
case "/":
result = num1 / num2;
break;
}
resultLabel.setText(String.valueOf(result));
inputField.setText("");
num1 = 0;
num2 = 0;
operator = "";
} else {
inputField.setText(inputField.getText() + action);
}
}
public static void main(String[] args) {
CalculatorGUI calculator = new CalculatorGUI();
calculator.setVisible(true);
}
}
```
运行以上代码后,便可以看到一个简单的计算器界面。
JFrame和JPanel的区别
JFrame和JPanel都是Java Swing提供的GUI组件,但它们有一些区别。
JFrame是一个顶级容器(Top-level Container),它是Swing应用程序中的主窗口。它提供了标题栏、边框、最大化、最小化和关闭按钮等标准窗口功能。JFrame可以包含其他Swing组件,如JPanel、JButton等。
JPanel是一个容器(Container),它可以用来组织和管理其他组件。它通常被用于将多个组件组合成一个整体。JPanel可以包含其他Swing组件,如JLabel、JTextField等。
JFrame和JPanel的主要区别在于:JFrame是一个完整的窗口,而JPanel是一个轻量级容器,通常用于组织和管理其他组件。JFrame在创建Swing应用程序时通常用作应用程序的主窗口,而JPanel则作为JFrame的子容器来组织和管理其他组件。