Java 第十一章 GUI编程(2)

ops/2025/3/5 21:44:56/

目录

GUI

事件处理

基本思路

添加事件监听器

对话框

实例


GUI


事件处理

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

基本思路

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

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

 

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

添加事件监听器

形式:

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

// 事件处理

@Override

public void actionPerformed(ActionEvent e) {

执行操作

}

});

java">//按钮的事件处理程序 new + 接口,是Java中一种简化的写法,创建了一个接口的匿名内部类对象//登录按钮button.addActionListener(new ActionListener() {@Overridepublic 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.完成十进制整数转其他进制数的小工具

java">public class numFrame extends JFrame {public numFrame() {initComponents();}private void initComponents() {// JFormDesigner - Component initialization - DO NOT MODIFY  //GEN-BEGIN:initComponents  @formatter:offlabel5 = 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:onsetLocationRelativeTo(null);setResizable(false);setVisible(true);//转换进制surebutton.addActionListener(new ActionListener() {@Overridepublic 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:offprivate 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.ppmy.cn/ops/163413.html

相关文章

Zookeeper 的 Node(Znode) 是什么?Zookeeper 监听机制的特点是什么?

Zookeeper 提供了一种 发布-订阅(Pub-Sub)机制,不过它更常被称为 Watch 机制。核心思想是:客户端可以对某个 Zookeeper 节点(Node)设置 Watch,当这个节点发生变化时,Zookeeper 会主动…

计算机毕业设计SpringBoot+Vue.js教师工作量管理系统(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

【云原生之kubernetes实战】在k8s环境中高效部署Vikunja任务管理工具(含数据库配置)

【【云原生之kubernetes实战】在k8s环境中高效部署Vikunja任务管理工具(含数据库配置) 前言一、Vikunja介绍1.1 Vikunja简介1.2 Vikunja主要特点1.3 使用场景二、相关知识介绍2.1 本次实践存储介绍2.2 k8s存储介绍三、本次实践介绍3.1 本次实践简介3.2 本次环境规划3.3 部署前…

wheel_legged_genesis 开源项目复现与问题记录

Reinforcement learning of wheel-legged robots based on Genesis System Requirements Ubuntu 20.04/22.04/24.04 python > 3.10 开始配置环境! 点击releases后进入,下载对应最新版本的代码: 将下载后的代码包解压到你的自定义路径下&…

Linux 基本开发工具的使用(yum、vim、gcc、g++、gdb、make/makefile)

文章目录 Linux 软件包管理器 - yum理解什么是软件包和yum如何查看/查找软件包如何安装软件如何实现本地机器和云服务器之间的文件互传如何卸载软件 Linux 编辑器 - vim 的使用vim 的基本概念vim 的基本操作vim 命令模式各命令汇总vim 底行模式各命令汇总vim 的简单配置 Linux …

【YashanDB认证】yashandb23.3.1 个人版单机部署安装实践

YCA报名链接如下: YashanDB|崖山数据库系统YashanDB学习中心-YCA认证详情 目前免费 主要参考文档: 单机(主备)部署 | YashanDB Doc 另外还参考摩天轮文章: YashanDB 23.2.9.101 企业版安装步骤抢先看! - 墨天轮 …

数据可视化02-PCA降维

一、PCA PCA做什么?找坐标系。 目标?二维降到一维,信息保留最多。 怎么样最好?数据分布最分散的方向(方差最大),作为主成分(坐标轴)。 二、怎么找主成分? …

FPGA开发,使用Deepseek V3还是R1(6):以滤波器为例

以下都是Deepseek生成的答案 FPGA开发,使用Deepseek V3还是R1(1):应用场景 FPGA开发,使用Deepseek V3还是R1(2):V3和R1的区别 FPGA开发,使用Deepseek V3还是R1&#x…