java按钮事件例子(java窗体按钮事件)

发布时间:2022-11-15

本文目录一览:

  1. java按钮事件
  2. java按钮触发事件问题
  3. Java给按钮添加事件

java按钮事件

调用顺序: 单击按钮 → 调用actionPerformed → 调用repaint → 调用paint

java按钮触发事件问题

可以使用按钮单击事件,改变其它组件的状态。例如下面是一个计数器的例子:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Demo7 extends JFrame {
    private int count = 1;
    public Demo7() {
        this.setSize(600, 400);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
        this.setLayout(new FlowLayout());
        JLabel label = new JLabel(String.valueOf(count));
        this.add(label);
        JButton button = new JButton("Click Me!");
        // 按钮单击事件,改变 Label 显示文本
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                count++;
                label.setText(String.valueOf(count));
            }
        });
        this.add(button);
    }
    public static void main(String[] args) {
        new Demo7().setVisible(true);
    }
}

Java给按钮添加事件

赞一个,提前学习,做好预先,是个好习惯。 Java图形界面主要有 AWT、SWING、SWT、JavaFx 等技术。 JButton(按钮)是 SWING 里面很常用的组件。直接添加按钮到窗口,并不会产生任何交互效果。 要想产生交互效果,就需要了解 AWT、SWING 的事件处理机制:

  • 事件:用户对组件的一个操作,称之为一个事件;
  • 事件源:发生事件的组件就是事件源;
  • 事件处理器:负责处理事件的方法; 比如点击按钮弹出 "HelloWorld":
  • 事件是点击按钮;
  • 事件源就是按钮;
  • 事件处理器就会弹出对话框,显示 "HelloWorld"。 常用的事件(Event)有:
  • 鼠标事件MouseEvent:鼠标按下、移入、移除、滚轮等)
  • 键盘事件KeyEvent:键盘按下、释放等)
  • 动作事件ActionEvent:当按钮、菜单项被点击,在 JTextField 中按 Enter 键时触发该事件) 按钮添加接收器,不同的事件,接收器不同:
  • ActionEvent 的接收器是 ActionListener
  • KeyEvent 的接收器就是 KeyListener 基础知识,大概就是这些。 所以想要 JButton 产生交互,就需要给它添加事件处理器,当发生这些事件时,触发该处理器进行处理。

示例 1:点击按钮,弹出 Hello World

// 导入3个图形界面常用包
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ButtonDemo extends JFrame {
    public ButtonDemo() {
        JButton jbHello = new JButton("Hello"); // 按钮
        jbHello.addActionListener(new ActionListener() { // 给按钮添加事件接收器
            @Override
            public void actionPerformed(ActionEvent e) { // 接收到事件后,进行下面的处理
                System.out.println("Hello World"); // 控制台打印输出
                JOptionPane.showMessageDialog(null, "Hello World"); // 弹出对话框,显示 HelloWorld
            }
        });
        add(jbHello); // 把按钮添加到窗体
        // 窗体属性的设置
        setLayout(new FlowLayout()); // 窗体流式布局,按添加顺序从左到右排列组件
        setSize(300, 200); // 宽300像素,高200
        setLocationRelativeTo(null); // 窗体放在显示器中间
        setTitle("HelloWord"); // 窗体的标题
        setDefaultCloseOperation(EXIT_ON_CLOSE); // 点击窗体右上角的关闭按钮时,结束程序
        setVisible(true); // 窗体可见
    }
    public static void main(String[] args) {
        new ButtonDemo();
    }
}

看明白了吧,addActionListener 是关键。

进阶版:加法计算器

代码稍微长一点,但注释很多,参考如下:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
// AddFrame继承自JFrame类,并且实现了ActionListener接口
public class AddFrame extends JFrame implements ActionListener {
    // 组件
    JTextField jtf1, jtf2, jtf3; // 文本框,用于显示数字
    JButton jbAdd; // 按钮,用于当点击按钮时计算出加法的结果
    JButton jbClear; // 按钮,用于清空数字
    public AddFrame() { // 构造方法
        // 初始化组件
        jtf1 = new JTextField(5); // 长度为5的文本框
        JLabel jl = new JLabel("+"); // 文字标签
        jtf2 = new JTextField(5);
        jtf3 = new JTextField(6);
        jtf3.setEditable(false);
        jbAdd = new JButton("=");
        jbAdd.addActionListener(this); // 因为本类已经实现了ActionListener接口,所以添加事件的接收器就是自己(this)
        jbClear = new JButton("清除");
        jbClear.addActionListener(this);
        // 把组件添加到窗体
        add(jtf1);
        add(jl);
        add(jtf2);
        add(jbAdd);
        add(jtf3);
        add(jbClear);
        // 窗体属性的设置
        setLayout(new FlowLayout()); // 窗体流式布局,按添加顺序从左到右排列组件
        setSize(380, 100); // 宽380像素,高100
        setLocationRelativeTo(null); // 窗体放在显示器中间
        setTitle("加法计算器"); // 窗体的标题
        setDefaultCloseOperation(EXIT_ON_CLOSE); // 点击窗体右上角的关闭按钮时,结束程序
        setVisible(true); // 窗体可见
    }
    /*
     * 实现ActionListener接口就必须重写actionPerformed方法
     */
    @Override
    public void actionPerformed(ActionEvent e) { // 当事件产生后,就会执行actionPerformed里的方法
        JButton jbTemp = (JButton) e.getSource(); // 得到事件源
        if (jbTemp == jbAdd) { // 如果是从jbAdd产生的事件,那么执行加法操作
            // 因为是简单案例,就不判断和处理用户乱输入字母汉字等情况导致的异常了
            int x = Integer.parseInt(jtf1.getText()); // 从文本框1得到字符串并转化成数字
            int y = Integer.parseInt(jtf2.getText());
            jtf3.setText(x + y + ""); // 计算两个数的和,并显示在文本框3上
        } else if (jbTemp == jbClear) { // 如果事件源是jbClear,那么清除文本框的文字
            jtf1.setText("");
            jtf2.setText("");
            jtf3.setText("");
        }
    }
    // main方法
    public static void main(String[] args) {
        new AddFrame(); // 创建一个AddFrame的实例
    }
}