Java 第十一章 GUI编程(2)

目录

GUI

事件处理

基本思路

添加事件监听器

对话框

实例


GUI


事件处理

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

基本思路

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

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

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

添加事件监听器

形式:

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

// 事件处理

@Override

public void actionPerformed(ActionEvent e) {

执行操作

}

});

java 复制代码
//按钮的事件处理程序 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.完成十进制整数转其他进制数的小工具

java 复制代码
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();
    }
}
相关推荐
酉鬼女又兒几秒前
零基础快速入门前端CSS Transform 与动画核心知识点及蓝桥杯 Web 应用开发考点解析(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·css·职场和发展·蓝桥杯·html
山川行4 分钟前
Python快速闯关8:内置函数
java·开发语言·前端·笔记·python·学习·visual studio
charlie1145141914 分钟前
嵌入式C++教程实战之Linux下的单片机编程:从零搭建 STM32 开发工具链(2) —— HAL 库获取、启动文件坑位与目录搭建
linux·开发语言·c++·stm32·单片机·学习·嵌入式
Java基基8 分钟前
sdkman 一键切换 JDK 版本管理工具
java·开发语言·sdkman
美好的事情能不能发生在我身上12 分钟前
Jmeter压测遇到的问题
java·分布式·jmeter
春日见14 分钟前
GIT操作大全(个人开发与公司开发)
开发语言·驱动开发·git·matlab·docker·计算机外设·个人开发
云烟成雨TD15 分钟前
Spring AI 1.x 系列【14】三月双版本连发!Spring AI 最新功能全掌握
java·人工智能·spring
XiYang-DING24 分钟前
【Java SE】var关键字
java·开发语言
还是大剑师兰特27 分钟前
将 Utils.js 挂载为全局(window.Utils.xx)完整配置方案
开发语言·javascript·ecmascript
.YM.Z32 分钟前
C++入门——缺省参数,函数重载,引用,inline函数,nullptr的介绍和使用
开发语言·c++