1.编写一个程序:创建如下图所示界面,实现计算浮力、清空功能。
注:F浮=ρgv排 。
代码:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class BuoyancyCalculator extends JFrame {
private JTextField densityField;
private JTextField gravityField;
private JTextField volumeField;
private JTextField buoyancyField;
public BuoyancyCalculator() {
setTitle("计算浮力");
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setLayout(null);
JLabel densityLabel = new JLabel("密度");
densityLabel.setBounds(30, 20, 50, 25);
add(densityLabel);
densityField = new JTextField();
densityField.setBounds(100, 20, 150, 25);
add(densityField);
JLabel gravityLabel = new JLabel("g");
gravityLabel.setBounds(30, 50, 50, 25);
add(gravityLabel);
gravityField = new JTextField();
gravityField.setBounds(100, 50, 150, 25);
add(gravityField);
JLabel volumeLabel = new JLabel("V 排");
volumeLabel.setBounds(30, 80, 50, 25);
add(volumeLabel);
volumeField = new JTextField();
volumeField.setBounds(100, 80, 150, 25);
add(volumeField);
JLabel buoyancyLabel = new JLabel("浮力");
buoyancyLabel.setBounds(30, 110, 50, 25);
add(buoyancyLabel);
buoyancyField = new JTextField();
buoyancyField.setBounds(100, 110, 150, 25);
buoyancyField.setEditable(false);
add(buoyancyField);
JButton calculateButton = new JButton("计算");
calculateButton.setBounds(100, 140, 80, 25);
add(calculateButton);
calculateButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
calculateBuoyancy();
}
});
}
private void calculateBuoyancy() {
try {
double density = Double.parseDouble(densityField.getText());
double gravity = Double.parseDouble(gravityField.getText());
double volume = Double.parseDouble(volumeField.getText());
double buoyancy = density * gravity * volume;
buoyancyField.setText(String.valueOf(buoyancy));
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this, " 请 输 入 有 效 的 数 字 ", " 错 误 ", JOptionPane.ERROR_MESSAGE);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new BuoyancyCalculator().setVisible(true);
}
});
}
}
运行结果:
2.设计一个简单的压强计算器界面。公式:p=ρgh
第一种:g不固定
代码:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
// 定义压力计算器类,继承自JFrame表示它是一个窗口应用程序
public class PressureCalculator extends JFrame {
// 声明用于用户输入和显示的文本框组件
private JTextField densityField;
private JTextField gravityField;
private JTextField heightField;
private JTextField pressureField;
// 构造函数,用于初始化界面和组件
public PressureCalculator() {
setTitle("压力计算器"); // 设置窗口标题
setSize(300, 200); // 设置窗口大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置默认的关闭操作为退出程序
setLocationRelativeTo(null); // 将窗口位置设置为屏幕中央
setLayout(null); // 使用空布局管理器,允许手动设置组件位置
// 创建标签和文本框组件,用于输入密度、重力加速度、高度和显示压力
// 设置它们的位置和大小,并将它们添加到窗口中
JLabel densityLabel = new JLabel("密度 ρ");
densityLabel.setBounds(30, 20, 80, 25); // 设置标签位置和大小
add(densityLabel); // 将标签添加到窗口中
densityField = new JTextField();
densityField.setBounds(120, 20, 150, 25); // 设置文本框位置和大小
add(densityField); // 将文本框添加到窗口中
JLabel gravityLabel = new JLabel("重力加速度 g");
gravityLabel.setBounds(30, 50, 80, 25);
add(gravityLabel);
gravityField = new JTextField();
gravityField.setBounds(120, 50, 150, 25);
add(gravityField);
JLabel heightLabel = new JLabel("高度 h");
heightLabel.setBounds(30, 80, 80, 25);
add(heightLabel);
heightField = new JTextField();
heightField.setBounds(120, 80, 150, 25);
add(heightField);
JLabel pressureLabel = new JLabel("压力 P");
pressureLabel.setBounds(30, 110, 80, 25);
add(pressureLabel);
pressureField = new JTextField();
pressureField.setBounds(120, 110, 150, 25);
pressureField.setEditable(false); // 设置压力文本框为不可编辑状态
add(pressureField);
JButton calculateButton = new JButton("计算");
calculateButton.setBounds(120, 140, 80, 25); // 设置按钮位置和大小
add(calculateButton);
// 添加按钮的点击事件监听器
calculateButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
calculatePressure(); // 当按钮点击时调用计算压力的方法
}
});
}
// 计算压力的方法
private void calculatePressure() {
try {
// 从文本框中获取用户输入的密度、重力加速度和高度
double density = Double.parseDouble(densityField.getText());
double gravity = Double.parseDouble(gravityField.getText());
double height = Double.parseDouble(heightField.getText());
// 计算压力 P = ρ * g * h
double pressure = density * gravity * height;
// 将计算得到的压力值显示在压力文本框中
pressureField.setText(String.valueOf(pressure));
} catch (NumberFormatException ex) {
// 如果用户输入的不是有效的数字,则弹出错误消息框
JOptionPane.showMessageDialog(this, "请输入有效的数字", "错误", JOptionPane.ERROR_MESSAGE);
}
}
// 主方法,程序入口
public static void main(String[] args) {
// 使用SwingUtilities.invokeLater()确保在事件分发线程上创建和显示窗口
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new PressureCalculator().setVisible(true); // 创建并显示压力计算器界面
}
});
}
}
运行结果:
第二种:已知 g=10
代码:
//导入了必要的Swing组件和事件处理类。
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
// 定义压强计算器类,继承自JFrame表示它是一个窗口应用程序
public class PressureCalculator extends JFrame {
// 声明用于用户输入和显示的文本框组件
private JTextField densityField; // 密度输入文本框
private JTextField gravityField; // 重力加速度输入文本框
private JTextField heightField; // 高度输入文本框
private JTextField pressureField; // 显示压力的文本框
// 构造函数,用于初始化界面和组件
public PressureCalculator() {
setTitle("压力计算器"); // 设置窗口标题
setSize(300, 200); // 设置窗口大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置默认的关闭操作为退出程序
setLocationRelativeTo(null); // 将窗口位置设置为屏幕中央
setLayout(null); // 使用空布局管理器,允许手动设置组件位置
// 创建标签和文本框组件,用于输入密度、重力加速度、高度和显示压力
// 设置它们的位置和大小,并将它们添加到窗口中
JLabel densityLabel = new JLabel("密度 ρ");
densityLabel.setBounds(30, 20, 80, 25); // setBounds 用于设置标签的位置和大小
add(densityLabel); // 将标签添加到窗口中
densityField = new JTextField();
densityField.setBounds(120, 20, 150, 25); // 设置文本框位置和大小
add(densityField); // 将文本框添加到窗口中
JLabel gravityLabel = new JLabel("重力加速度 g");
gravityLabel.setBounds(30, 50, 80, 25);
add(gravityLabel);
// 设置重力加速度文本框,并设定默认值为10
gravityField = new JTextField("10");
gravityField.setBounds(120, 50, 150, 25);
gravityField.setEditable(false); // 设为不可编辑,因为是固定值
add(gravityField);
JLabel heightLabel = new JLabel("高度 h");
heightLabel.setBounds(30, 80, 80, 25);
add(heightLabel);
heightField = new JTextField();
heightField.setBounds(120, 80, 150, 25);
add(heightField);
JLabel pressureLabel = new JLabel("压力 P");
pressureLabel.setBounds(30, 110, 80, 25);
add(pressureLabel);
pressureField = new JTextField();
pressureField.setBounds(120, 110, 150, 25);
pressureField.setEditable(false); // 设为不可编辑,仅用于显示计算结果
add(pressureField);
JButton calculateButton = new JButton("计算");
calculateButton.setBounds(120, 140, 80, 25); // 设置按钮位置和大小
add(calculateButton);
// 添加按钮的点击事件监听器
calculateButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
calculatePressure(); // 当按钮点击时调用计算压力的方法
}
});
}
// 计算压力的方法
private void calculatePressure() {
try {
// 从文本框中获取用户输入的密度、重力加速度和高度
double density = Double.parseDouble(densityField.getText());//parseDouble 方法用于将一个表示数字的字符串转换为对应的 double 类型数值。
double gravity = Double.parseDouble(gravityField.getText()); // 直接使用文本框中的值
double height = Double.parseDouble(heightField.getText());
// 计算压力 P = ρ * g * h
double pressure = density * gravity * height;
// 将计算得到的压力值显示在压力文本框中
pressureField.setText(String.valueOf(pressure));
} catch (NumberFormatException ex) {
// 如果用户输入的不是有效的数字,则弹出错误消息框
JOptionPane.showMessageDialog(this, "请输入有效的数字", "错误", JOptionPane.ERROR_MESSAGE);
}
}
// 主方法,程序入口
public static void main(String[] args) {
// 使用SwingUtilities.invokeLater()确保在事件分发线程上创建和显示窗口
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new PressureCalculator().setVisible(true); // 创建并显示压力计算器界面
}
});
}
}
运行结果:
1.窗口设置:
1. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
这行代码设置窗口关闭的操作。JFrame.EXIT_ON_CLOSE 表示当用户关闭窗口时,应用程序将退出并终止。这是一个常见的设置,用于确保在用户关闭窗口时应用程序可以正确地退出。
2.setLocationRelativeTo(null);
这行代码将窗口的位置设置为相对于屏幕的中心。传递 null 参数告诉窗口在屏幕中心显示。这样设置可以确保应用程序启动时窗口会出现在屏幕中央,而不是默认的某个固定位置。
3.setLayout(null); // 使用空布局管理器
这行代码设置窗口的布局管理器为 null,即空布局管理器。在空布局管理器下,所有组件的位置和大小需要手动设置。这种方式可以让开发者完全控制组件的位置和布局,适合于一些简单且位置固定的界面设计。但是,它也需要开发者自行处理组件的重叠和调整大小等问题,因此在大多数情况下,推荐使用更灵活的布局管理器来自动处理组件的布局。
2.创建标签和文本框组件,用于输入密度、重力加速度、高度和显示压力
2.1 密度标签与文本框:
//密度标签与文本框
JLabel densityLabel = new JLabel("密度 ρ");
densityLabel.setBounds(30, 20, 80, 25);
add(densityLabel);
densityField = new JTextField();
densityField.setBounds(120, 20, 150, 25);
add(densityField);
1. JLabel densityLabel = new JLabel("密度 ρ");
这一行创建了一个标签对象 densityLabel,并设置显示的文本为 "密度 ρ"。标签用于在界面上显示静态
文本信息。
2. densityLabel.setBounds(30, 20, 80, 25);
这行代码设置了标签在界面上的位置和大小。具体来说,标签位于 (30, 20) 坐标处,宽度为 80 像素,
高度为 25 像素。这些参数依次表示 x 坐标、y 坐标、宽度和高度。
3. add(densityLabel);:
将 densityLabel 标签添加到当前的 GUI 窗口或容器中。这样做可以将标签显示在用户界面上。
4. densityField = new JTextField();
这行代码创建了一个文本框对象 densityField,用于用户输入或显示文本信息。
5. .setBounds(120, 140, 80, 25): 这是 JButton 类中的方法,用于设置按钮的位置和大小。
120: 表示按钮的 x 坐标位置。在窗口中,坐标从左上角开始计算,横向向右增加。
140: 表示按钮的 y 坐标位置。同样,从窗口的左上角开始计算,纵向向下增加。
80: 表示按钮的宽度,单位是像素。
25: 表示按钮的高度,单位是像素。
6. add(densityField);
将 densityField 文本框添加到当前的 GUI 窗口或容器中,使其在界面上可见。
这段代码的作用是在图形用户界面中创建一个标签和一个文本框,用于显示和输入密度相关的信息。标签显示静态文本 "密度 ρ",而文本框用于用户输入或显示与密度相关的数值。这种界面设计通常用于用户输入数据、进行计算或展示信息的简单应用程序中。
2.2 计算按钮
JButton calculateButton = new JButton("计算");
calculateButton.setBounds(120, 140, 80, 25);
add(calculateButton);
这部分代码创建了一个按钮对象 calculateButton
,并设置按钮的文本为 "计算",并将按钮添加到当前的 GUI 窗口或容器中。按钮位于 (120, 140) 坐标处,宽度为 80 像素,高度为 25 像素。
calculateButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
calculatePressure(); // 当按钮点击时调用计算压力的方法
}
});
calculateButton.addActionListener(...)
:这行代码添加了一个事件监听器,用于监听calculateButton
按钮的点击事件。new ActionListener() { ... }
:通过创建一个匿名内部类实现ActionListener
接口,重写其actionPerformed
方法。这种方式允许在按钮点击时定义具体的操作。public void actionPerformed(ActionEvent e)
:这是ActionListener
接口中定义的方法,当按钮被点击时,Java 运行时会调用这个方法。
2.3 计算压强
-
setText(String.valueOf(pressure))
方法:setText
是用于设置文本框内容的方法,通常用于将文本框显示的内容更新为指定的文本。String.valueOf(pressure)
将pressure
变量的值转换为字符串形式。这样做的目的是确保文本框显示的内容是字符串类型,因为setText
方法接受的参数必须是字符串。