Java 第十一章 GUI编程(2)

news2025/4/22 10:03:50

目录

GUI

事件处理

基本思路

添加事件监听器

对话框

实例


GUI


事件处理

  • 对于采用了图形用户界面的程序来说,事件控制是非常重要的;
  • 到目前为止, 我们编写的图形用户界面程序都仅仅只是完成了界面,而没有任何实际的功能, 要实现相应的功能,必须进行事件处理;
  •  用户与GUI组件进行交互就会发生事件,如:按下一个按钮、用键盘输入一个字 符、点击鼠标等等;
  •  当前我们要关注的并不是“事件是如何产生的”,而是讨论当发生事件后,我 们应当“如何处理”。

基本思路

 Java中,事件处理的基本思路如下:

● 一个事件源产生一个事件并把它送到监听器那里,监听器一直等待,直 到它收到一个事件,一旦事件被接受,监听器将处理这些事件;

 

  • 由于我们想要处理按钮的点击事件,因此,按钮便是事件源;
  • 监听器类型是ActionListener。

添加事件监听器

形式:

按钮对象.addActionListener(new ActionListener() {

// 事件处理

@Override

public void actionPerformed(ActionEvent e) {

执行操作

}

});

//按钮的事件处理程序 new + 接口,是Java中一种简化的写法,创建了一个接口的匿名内部类对象
        //登录按钮
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                  String account = textField1.getText();//获得文本框账户值
                  String password = textField2.getText();//获得密码框内容
                  try {
                  if (account.length() == 0) {
                      JOptionPane.showMessageDialog(null,"账户不能为空");
                      return;
                  }
                  if (password.length() == 0) {
                      JOptionPane.showMessageDialog(null,"密码不能为空");
                      return;
                  }
                  //预留数据库对接
                  //连接服务器Socket
                  //打开聊天窗口
                      new ChatFrame();
                      dispose();//释放关闭聊天窗口

              }catch (Exception ex){
                  ex.printStackTrace();
                  JOptionPane.showMessageDialog(null, "系统忙","消息",JOptionPane.WARNING_MESSAGE);
              }
            }
        });

对话框

JOptionPane对话框

showMessageDialog():消息对话框

主要有五种消息类型,类型不同,图标不同:

  • ERROR_MESSAGE            //错误消息提示
  • INFORMATION_MESSAGE //信息提示
  • WARNING_MESSAGE         // 警告提示
  • QUESTION_MESSAGE        //问题提示
  • PLAIN_MESSAGE                //简洁提示

showConfirmDialog():确认对话框

主要有四种消息类型,类型不同,图标不同:

  • DEFAULT_OPTION             //默认选项
  • YES_NO_OPTION                //是/否选项
  • YES_NO_CANCEL_OPTION  //是/否/取消选项
  • OK_CANCEL_OPTION             //确定/取消

实例

1.完成十进制整数转其他进制数的小工具

public class numFrame extends JFrame {
    public numFrame() {
        initComponents();
    }

    private void initComponents() {
        // JFormDesigner - Component initialization - DO NOT MODIFY  //GEN-BEGIN:initComponents  @formatter:off
        label5 = new JLabel();
        two = new JLabel();
        eight = new JLabel();
        ten = new JLabel();
        label9 = new JLabel();
        sixteen = new JLabel();
        textField1 = new JTextField();
        textField2 = new JTextField();
        textField3 = new JTextField();
        textField4 = new JTextField();
        surebutton = new JButton();
        button = new JButton();
        label10 = new JLabel();

        //======== this ========
        setTitle("\u8fdb\u5236\u8f6c\u6362\u5668");
        Container contentPane = getContentPane();
        contentPane.setLayout(null);
        contentPane.add(label5);
        label5.setBounds(55, 240, 25, label5.getPreferredSize().height);

        //---- two ----
        two.setText("\u4e8c\u8fdb\u5236");
        contentPane.add(two);
        two.setBounds(new Rectangle(new Point(50, 140), two.getPreferredSize()));

        //---- eight ----
        eight.setText("\u516b\u8fdb\u5236");
        contentPane.add(eight);
        eight.setBounds(new Rectangle(new Point(50, 180), eight.getPreferredSize()));

        //---- ten ----
        ten.setText("\u5341\u8fdb\u5236");
        contentPane.add(ten);
        ten.setBounds(new Rectangle(new Point(50, 75), ten.getPreferredSize()));
        contentPane.add(label9);
        label9.setBounds(new Rectangle(new Point(50, 235), label9.getPreferredSize()));

        //---- sixteen ----
        sixteen.setText("\u5341\u516d\u8fdb\u5236");
        contentPane.add(sixteen);
        sixteen.setBounds(new Rectangle(new Point(50, 230), sixteen.getPreferredSize()));
        contentPane.add(textField1);
        textField1.setBounds(120, 130, 150, textField1.getPreferredSize().height);
        contentPane.add(textField2);
        textField2.setBounds(120, 175, 150, textField2.getPreferredSize().height);
        contentPane.add(textField3);
        textField3.setBounds(120, 70, 150, textField3.getPreferredSize().height);
        contentPane.add(textField4);
        textField4.setBounds(120, 230, 150, textField4.getPreferredSize().height);

        //---- surebutton ----
        surebutton.setText("\u8f6c\u6362");
        contentPane.add(surebutton);
        surebutton.setBounds(new Rectangle(new Point(80, 350), surebutton.getPreferredSize()));

        //---- button ----
        button.setText("\u8fd4\u56de");
        contentPane.add(button);
        button.setBounds(new Rectangle(new Point(390, 350), button.getPreferredSize()));

        //---- label10 ----
        label10.setText("\u8bf7\u8f93\u5165\u5341\u8fdb\u5236\u6570\uff1a");
        contentPane.add(label10);
        label10.setBounds(20, 25, 175, label10.getPreferredSize().height);

        contentPane.setPreferredSize(new Dimension(580, 675));
        pack();
        setLocationRelativeTo(getOwner());
        // JFormDesigner - End of component initialization  //GEN-END:initComponents  @formatter:on
        setLocationRelativeTo(null);
        setResizable(false);
        setVisible(true);
        //转换进制
        surebutton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int num = 0;
                try {
                  num = new Integer(textField3.getText());
                }catch (NumberFormatException n){
                    n.printStackTrace();
                    JOptionPane.showMessageDialog(null, "不是有效数字");
                }
                try{
                    textField1.setText(Integer.toBinaryString(num));
                    textField2.setText(Integer.toOctalString(num));
                    textField4.setText(Integer.toHexString(num));
                }catch (Exception ex){
                    ex.printStackTrace();
                    JOptionPane.showMessageDialog(null, "系统忙,请稍后再试");
                }
            }
        });
    }

    // JFormDesigner - Variables declaration - DO NOT MODIFY  //GEN-BEGIN:variables  @formatter:off
    private JLabel label5;
    private JLabel two;
    private JLabel eight;
    private JLabel ten;
    private JLabel label9;
    private JLabel sixteen;
    private JTextField textField1;
    private JTextField textField2;
    private JTextField textField3;
    private JTextField textField4;
    private JButton surebutton;
    private JButton button;
    private JLabel label10;
    // JFormDesigner - End of variables declaration  //GEN-END:variables  @formatter:on
    
	//打开进制转换器
	
	public static void main(String[] args) {
        new numFrame();
    }
}

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2310348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

anaconda 安装geemap配置详细教程

本章教程,主要介绍如何通过anaconda 安装ee 和geemap模块 一、示例代码 创建一个测试文件:geemapTets.ipynb # 导入 Google Earth Engine (GEE) 库,用于处理地理空间数据 import ee # 导入 geemap 库,用于可视化和交互式处理 GEE 数据 import geemap # 创建一个 geemap.M…

4G工业路由器在公交充电桩中的应用与优势

随着电动公交车的普及,公交充电桩的稳定运行和高效管理是交通营运部门最关心的问题。4G工业路由器凭借其卓越的数据采集和通讯能力,成为实现充电桩智能化管理的关键。 公交充电桩运维管理需求概述: 1.实时性:实时监控充电状态、剩…

【设计模式】单例模式|饿汉模式|懒汉模式|指令重排序

目录 1.什么是单例模式? 2.如何保证单例? 3.两种写法 (1)饿汉模式(早创建) (2)懒汉模式(缓执行,可能不执行) 4.应用场景 🔥5.多…

01. HarmonyOS应用开发实践与技术解析

文章目录 前言项目概述HarmonyOS应用架构项目结构Ability生命周期 ArkTS语言特性装饰器状态管理 UI组件与布局基础组件响应式布局样式与主题 页面路由与参数传递页面跳转参数接收 数据绑定与循环渲染数据接口定义循环渲染 条件渲染组件生命周期最佳实践与性能优化组件复用响应式…

【NLP 30、文本匹配任务 —— 传统机器学习算法】

目录 一、文本匹配任务的定义 1.狭义解释 2.广义解释 二、文本匹配的应用 1.问答对话 2.信息检索 3.文本匹配任务应用 三、智能问答 1.智能问答的基本思路 依照基础资源划分: 依照答案产出方式划分 依照NLP相关技术划分 四、智能问答的价值 1.智能客服 2.Faq知识库问…

爬虫Incapsula reese84加密案例:Etihad航空

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关 一、找出需要加密的参数 1.js运行 atob(‘aHR0cHM6Ly93d3cuZXRpaGFkLmNvbS96aC1jbi8=’) 拿到网址,F12打开调试工具,随便搜索航班,切换到network搜索一个时间点可以找…

【Vue教程】使用Vite快速搭建前端工程化项目 Vue3 Vite Node.js

??大家好!我是毛毛张! ??个人首页: ??今天毛毛张分享的是关于如何快速??♂搭建一个前端工程化的项目的环境搭建以及流程?? 文章目录 1.前端工程化环境搭建?? 1.1 什么是前端工程化1.2 nodejs的简介和安装 1.2.1 什么是Nodejs1.2.2 如何安装…

如何将飞书多维表格与DeepSeek R1结合使用:效率提升的完美搭档

将飞书的多维表格与DeepSeek R1结合使用,就像为你的数据管理和分析之旅装上一台涡轮增压器。两者的合作,不仅仅在速度上让人耳目一新,更是将智能化分析带入了日常的工作场景。以下是它们如何相辅相成并改变我们工作方式的一些分享。 --- 在…

算数操作符、赋值操作符、单目操作符、强制类型转换

一、算术操作符(、 -、 *、 /、 %) • - * / %操作符都是双⽬操作符,有**两个操作数**的符号就叫做双目操作符 10 4| || | 操作数1 操作数2// - % / * 以此类推•操作符也被叫做:运算符 1. 符号、符号 - 和 符号* •…

为AI聊天工具添加一个知识系统 之133 详细设计之74通用编程语言 之4 架构及其核心

本篇继续讨论 通用编程语言。 说明:本阶段的所有讨论都是围绕这一主题展开的,但前面的讨论分成了三个大部分(后面列出了这一段的讨论题目的归属关系)-区别distinguish(各别): 文化和习俗。知识…

RNN实现精神分裂症患者诊断(pytorch)

RNN理论知识 RNN(Recurrent Neural Network,循环神经网络) 是一种 专门用于处理序列数据(如时间序列、文本、语音、视频等)的神经网络。与普通的前馈神经网络(如 MLP、CNN)不同,RNN…

私有云基础架构

基础配置 使用 VMWare Workstation 创建三台 2 CPU、8G内存、100 GB硬盘 的虚拟机 主机 IP 安装服务 web01 192.168.184.110 Apache、PHP database 192.168.184.111 MariaDB web02 192.168.184.112 Apache、PHP 由于 openEuler 22.09 系统已经停止维护了&#xff…

rust学习笔记11-集合349. 两个数组的交集

rust除了结构体,还有集合类型,同样也很重要,常见的有数组(Array)、向量(Vector)、哈希表(HashMap) 和 集合(HashSet)字符串等,好意外呀…

超详细:数据库的基本架构

MySQL基础架构 下面这个图是我给出的一个MySQL基础架构图,可以清楚的了解到SQL语句在MySQL的各个模块进行执行过程。 然后MySQL可以分为两个部分,一个是server层,另一个是存储引擎。 server层 Server层涵盖了MySQL的大多数核心服务功能&am…

AI催化新一轮创业潮与创富潮:深圳在抢跑

作者:尺度商业大掌柜黄利明 2025年春节伊始至今,从DeepSeek R1开源模型持续引发全球围观,到腾讯混元Turbo S模型发布秀出了"秒回"绝活,再到国务院发布《新一代人工智能发展规划(2025-2030)》重磅…

Python:类型转换和深浅拷贝,可变与不可变对象

int():转换为一个整数,只能转换由纯数字组成的字符串 浮点型强转整型会去掉小数点及后面的数,只保留整数部分 #如果字符串中有数字和正负号以外的字符就会报错 float():整形转换为浮点型会自动添加一位小数 .0 如果字符串中有…

NAT 代理服务 内网穿透

🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 一:🔥 NAT 技术背景二:🔥 NAT IP 转换过程三:🔥 NAPT四:🔥 代理服务器🦋 正向…

高级课第五次作业

首先配置交换机,路由器 LSW1配置 [SW1]vlan batch 10 20 30 40 [SW1]int g0/0/2 [SW1-GigabitEthernet0/0/2]port link-type access [SW1-GigabitEthernet0/0/2]port default vlan 10 [SW1]int g0/0/3 [SW1-GigabitEthernet0/0/3]port link-type access […

51单片机编程学习笔记——动态数码管显示多个数字

大纲 视觉残留原理生理基础神经传导与处理 应用与视觉暂留相关的现象 频闪融合不好的实现好的效果 延伸 在《51单片机编程学习笔记——动态数码管》一文中,我们看到如何使用动态数码管显示数字。但是基于动态数码管设计的特点,每次只能显示1个数字。这就…

金蝶ERP星空对接流程

1.金蝶ERP星空OPENAPI地址: 金蝶云星空开放平台 2.下载金蝶云星空的对应SDK包 金蝶云星空开放平台 3.引入SDK流程步骤 引入Kingdee.CDP.WebApi.SDK 右键项目添加引用,在打开的引用管理器中选择浏览页签,点击浏览按钮,找到从官…