1、描述
包含主要元素JPanel、JButton、JTextField,标题栏,消息框(message box)等,如设置标题,两个显示文本内容框,两个输入框,一个计算按钮,以及计算显示结果的对话框。
2、关于坐标问题
横轴为x轴,向右为正;
竖轴为y轴,向下为正;
两者交叉点为起点。
3、代码
package cn.com.java.test;
import java.awt.EventQueue;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class CalculatorGUI extends JFrame {
// Constructor
public CalculatorGUI() {
// Set the properties of the JFrame
setTitle("促销活动计算器");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置整个窗口大小
setBounds(100, 100, 350, 300);
// 创建JPanel
JPanel contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
//添加一个显示文本
JLabel lblNewLabel_money = new JLabel("请输入金额");
lblNewLabel_money.setBounds(10, 0, 130, 30);
//添加组件
contentPane.add(lblNewLabel_money);
//创建JTextField输入框textField1
JTextField textField1 = new JTextField();
textField1.setBounds(10, 40, 130, 30);
//添加组件
contentPane.add(textField1);
//添加一个显示文本
JLabel lblNewLabel_price = new JLabel("请输入单价");
lblNewLabel_price.setBounds(10, 70, 130, 30);
//添加组件
contentPane.add(lblNewLabel_price);
//创建JTextField输入框textField2
JTextField textField2 = new JTextField();
textField2.setBounds(10, 100, 130, 30);
//添加组件
contentPane.add(textField2);
//运算按钮
JButton addButton = new JButton("开始计算");
//创建按钮并添加listener
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int num1 = Integer.parseInt(textField1.getText());
int num2 = Integer.parseInt(textField2.getText());
int result = num1/num2;
//将结果以弹窗形式提示出来
JOptionPane.showMessageDialog(null, "可得饮料 " + result+"瓶");
}
});
addButton.setBounds(80, 160, 100, 30);
contentPane.add(addButton);
}
// Main method
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
CalculatorGUI frame = new CalculatorGUI();
frame.setVisible(true);
} catch(Exception e) {
e.printStackTrace();
}
}
});
}
}
4、setBounds()
setBounds()是JFrame类的一个方法,用于设置窗口的大小和位置。
这里单独的setBounds()是整个窗口相对于电脑屏幕位置来说。(虽然这里左侧还是有点缝隙,)
setBounds()还可以为按钮,文本框设置坐标。
5、其他说明
1、contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));含义
在Java Swing中,JFrame类包含一个内容窗格(content pane),它是一个可以包含其他Swing组件的面板。在JFrame中添加组件时,实际上是将它们添加到内容窗格中,而不是直接添加到JFrame本身。
EmptyBorder是一个Swing边框类,它可以用来创建一个无填充的边框。EmptyBorder的构造函数有四个参数,它们分别代表边框的上、左、下、右四个方向的边框宽度(以像素为单位)。
在这里,contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
的意思是将内容窗格的边框设置为上、左、下、右四个方向都有5像素的空白区域。这样可以使窗口的边缘与窗口中的组件之间留下一些空间,使窗口看起来更加美观。
2、addActionListener()含义
addActionListener() 是一个 Java Swing 中的方法,用于向按钮添加一个 ActionListener。在 Java Swing 中,ActionListener 是一个监听器接口,用于响应按钮的单击事件。
在上面的代码中,addButton.addActionListener
是将一个 ActionListener 对象添加到 addButton 按钮上,以便在 addButton 被单击时执行相应的操作。具体来说,当 addButton 被单击时,程序会调用 ActionListener 中的 actionPerformed(ActionEvent e) 方法,执行其中的代码块,实现添加操作的逻辑。