实验基础课题6用java实现图形界面输入半径求圆面积 资源大小:2KB 上传日期:2011-12-21 资源积分:2分 下载次数:17 上 传 者:scp781031118 资源类型:代码类 标 签: 用java实现图形界面输入半径求圆 ### 实验知识点解析 #### 一、实验概述与目标 本次实验主要围绕Java图形用户界面(GUI)编程展开,旨在帮助学生掌握使用Java Swing库构建基本的GUI应用的基础知识。通过本实验的学习,学生将能够: - **理解并使用**框架(`JFrame`)、面板(`JPanel`)及简单的GUI组件(如`JLabel`、`JTextField`、`JButton`)来创建图形界面; - **熟悉布局管理器**的作用及其在不同场景下的应用; - **掌握Swing组件**的基本属性调整方法,例如改变框架大小、面板背景、标题等; - **了解事件监听机制**,包括如何定义监听类、向源对象注册监听器对象以及编写事件处理代码; - **学习多线程**的基本概念及其实现方式,包括通过继承`Thread`类和实现`Runnable`接口两种方法; - **掌握异常处理**的基本技巧,包括如何处理用户输入错误等情况。 #### 二、图形界面程序设计 ##### 1. 计算圆面积 **知识点:** - **框架和面板**: 使用`JFrame`作为主窗口容器,`JPanel`作为内部布局的载体。 - **文本框和标签**: 使用`JTextField`输入半径,使用`JLabel`显示结果。 - **数据类型转换**: 使用`Double.parseDouble()`将文本框中的`String`类型转换为`double`类型。 - **事件驱动编程**: 通过为按钮注册监听器,实现点击事件的响应。 **实验步骤:** 1. 创建一个继承自`JFrame`的类`Circle`。 2. 在类中添加必要的GUI组件:`JTextField`用于输入半径,`JButton`用于触发计算,`JLabel`用于显示结果。 3. 设置布局管理器,如使用`FlowLayout`或自定义布局。 4. 编写事件监听器处理逻辑,当用户点击“计算”按钮时,获取半径值并计算面积,然后更新`JLabel`显示结果。 **示例代码框架:** ```java import javax.swing.*; public class Circle extends JFrame { private JTextField radiusField; private JButton calculateButton; private JLabel resultLabel; public Circle() { initUI(); } private void initUI() { // 初始化GUI组件 radiusField = new JTextField(10); calculateButton = new JButton("计算"); resultLabel = new JLabel("结果"); // 添加监听器 calculateButton.addActionListener(e -> { String input = radiusField.getText(); try { double radius = Double.parseDouble(input); double area = Math.PI * radius * radius; resultLabel.setText("面积: " + area); } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(this, "请输入有效的半径值!", "错误", JOptionPane.ERROR_MESSAGE); } }); // 添加组件到面板 JPanel panel = new JPanel(new FlowLayout()); panel.add(radiusField); panel.add(calculateButton); panel.add(resultLabel); // 添加面板到窗口 this.add(panel); // 设置窗口属性 this.setTitle("圆面积计算器"); this.setSize(300, 200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public static void main(String[] args) { new Circle(); } } ``` ##### 2. 图形界面组件交互 **知识点:** - **Swing组件**: 包括`JPanel`、`JLabel`、`JTextField`和`JButton`等。 - **事件监听与处理**: 通过`ActionListener`监听按钮点击事件,并执行相应的操作。 - **组件属性设置**: 如改变窗口大小、标题,面板背景颜色等。 **实验步骤:** 1. 创建一个继承自`JFrame`的类`myGUI`。 2. 设计界面布局,包括面板、标签、文本框和按钮等组件。 3. 注册事件监听器,处理按钮点击事件。 4. 在事件处理方法中实现各种功能,如改变窗口大小、标题、面板背景颜色等。 **示例代码框架:** ```java import javax.swing.*; import java.awt.*; public class myGUI extends JFrame { private JButton changeButton; private JLabel titleLabel; private JTextField textField; private JPanel panel; public myGUI() { initUI(); } private void initUI() { // 初始化组件 titleLabel = new JLabel("初始标题"); textField = new JTextField("初始文本", 10); changeButton = new JButton("改变"); // 添加监听器 changeButton.addActionListener(e -> { // 改变窗口大小 setSize(400, 300); // 改变窗口标题 setTitle("新标题"); // 改变面板背景色 panel.setBackground(Color.RED); // 改变文本框背景色 textField.setBackground(Color.YELLOW); // 更新标签内容 titleLabel.setText("新标题"); }); // 添加组件到面板 panel = new JPanel(new GridLayout(2, 1)); panel.add(titleLabel); panel.add(textField); panel.add(changeButton); // 添加面板到窗口 this.add(panel); // 设置窗口属性 this.setTitle("初始标题"); this.setSize(300, 200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public static void main(String[] args) { new myGUI(); } } ``` #### 三、多线程实现 **知识点:** - **多线程基础**: 包括继承`Thread`类和实现`Runnable`接口两种方式。 - **线程调度与同步**: 使用`Thread.sleep()`方法控制线程的执行节奏。 - **异常处理**: 处理可能出现的`InterruptedException`。 **实验步骤:** 1. 定义一个`TicketSeller`类,实现`Runnable`接口。 2. 在`run`方法中实现售票逻辑。 3. 创建多个线程实例,模拟不同的售票窗口。 **示例代码框架:** ```java import java.util.concurrent.TimeUnit; public class TicketSeller implements Runnable { private int tickets = 500; @Override public void run() { while (tickets > 0) { System.out.println("现在出售的是第" + tickets + "张火车票"); tickets--; try { TimeUnit.MILLISECONDS.sleep(300); // 模拟延迟 } catch (InterruptedException e) { Thread.currentThread().interrupt(); System.out.println("线程中断!"); } } } public static void main(String[] args) { Thread[] sellers = new Thread[4]; for (int i = 0; i < sellers.length; i++) { sellers[i] = new Thread(new TicketSeller()); sellers[i].start(); } } } ``` #### 四、用户输入合法性验证 **知识点:** - **字符串处理**: 使用`String`类的方法检查输入的有效性。 - **异常处理**: 使用`try-catch`块捕获并处理可能发生的异常。 **实验步骤:** 1. 修改之前的计算圆面积程序。 2. 在事件处理方法中增加输入验证逻辑。 3. 如果输入无效,则提示用户重新输入。 **示例代码框架:** ```java import javax.swing.*; import java.awt.event.ActionEvent; public class CircleWithValidation extends JFrame { private JTextField radiusField; private JButton calculateButton; private JLabel resultLabel; public CircleWithValidation() { initUI(); } private void initUI() { // 初始化GUI组件 radiusField = new JTextField(10); calculateButton = new JButton("计算"); resultLabel = new JLabel("结果"); // 添加监听器 calculateButton.addActionListener(e -> { String input = radiusField.getText(); if (input.isEmpty()) { JOptionPane.showMessageDialog(this, "请输入半径值!", "错误", JOptionPane.ERROR_MESSAGE); } else { try { double radius = Double.parseDouble(input); double area = Math.PI * radius * radius; resultLabel.setText("面积: " + area); } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(this, "请输入有效的半径值!", "错误", JOptionPane.ERROR_MESSAGE); } } }); // 添加组件到面板 JPanel panel = new JPanel(new FlowLayout()); panel.add(radiusField); panel.add(calculateButton); panel.add(resultLabel); // 添加面板到窗口 this.add(panel); // 设置窗口属性 this.setTitle("圆面积计算器"); this.setSize(300, 200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public static void main(String[] args) { new CircleWithValidation(); } } ``` 通过以上实验,学生将能够深入理解Java Swing图形界面编程的核心概念和技术细节,并能够实际操作这些技术,从而提升解决实际问题的能力。
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![exe](https://img-home.csdnimg.cn/images/20210720083343.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 0
- 资源: 3
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)