首页 > 其他分享 >Swing处理按钮点击事件(适配器类、Action)

Swing处理按钮点击事件(适配器类、Action)

时间:2024-12-21 14:42:53浏览次数:4  
标签:color 适配器 Swing ColorAction import Action new public

效果

代码

Main

package test;

import javax.swing.*;
import java.awt.*;

public class Main {
    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            // `EventQueue.invokeLater()` 确保在正确线程中更新 GUI,避免线程安全问题。
            var f = new JFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.addWindowListener(new MyWindowListener());
            f.setSize(300, 300);

            var p = new JPanel();

            var b1 = new JButton(new ColorAction("black", p, Color.BLACK));
            var b2 = new JButton(new ColorAction("green", p, Color.GREEN));
            var b3 = new JButton(new ColorAction("yellow", p, Color.YELLOW));

            p.add(b1);
            p.add(b2);
            p.add(b3);

            f.add(p);
            f.setVisible(true);
        });
    }
}

Action类

继承了AbstractAction,间接实现了Action接口,而Action接口扩展了ActionListener

package test;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;

public class ColorAction extends AbstractAction {

    private final JComponent target;
    private final Color color;

    public ColorAction(String name, JComponent target, Color color) {
        super(name);

        this.target = target;
        this.color = color;

        putValue(Action.SHORT_DESCRIPTION, "将 颜色 变成 " + color + "色");
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        target.setBackground(color);
    }
}

事件处理中有几个重要的角色:事件源对象(例如按钮)、事件对象、监听器对象、事件处理逻辑。

事件处理的逻辑几乎总是和事件源对象(背景、各种组件)耦合。

适配器类

package test;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MyWindowListener extends WindowAdapter {

    @Override
    public void windowClosing(WindowEvent e) {
        System.out.println("窗口关闭");
    }
}

 

标签:color,适配器,Swing,ColorAction,import,Action,new,public
From: https://www.cnblogs.com/xkxf/p/18620741

相关文章

  • 《Java核心技术I》Swing中滚动窗格
    滚动窗格Swing中文本区没有滚动条,如需要,可以将文本区放在滚动窗格(scrollpane)中。textArea=newJTextArea(8,40);varscrollPane=newJScrollPane(textArea);添加到滚动窗格不是文本区特有的,所有组件都可以。注释:JTextArea组件只显示纯文本,......
  • 《Java核心技术I》Swing选择组件中的复选框
    选择组件除了输入,也需要选择组件,接下来介绍,复选框、单选按钮、选项列表以及滑块。复选框需要紧邻标签来说明其用途。bold=newJCheckBox("Bold");调用setSelected方法来选中或取消复选框bold.setSelected(true);isSelected方法将获取每个......
  • USACO备考冲刺必刷题 | P1458 Ordered Fractions
    学习C++从娃娃抓起!记录下USACO(美国信息学奥赛)备考学习过程中的题目,记录每一个瞬间。附上汇总贴:USACO备考冲刺必刷题|汇总-CSDN博客【题目描述】输入一个自然数 n,对于一个最简分数 a/b(分子和分母互质的分数),满足1≤b≤n,0≤a/b≤1,请找出所有满足条件的分数。这有一个例......
  • 适配器模式应用~获取IP地址时想起了适配器
    获取IP地址信息时,一般我们需要一个HttpServletRequest对象,然后从请求头里获取x-forwarded-for的值,而当我们使用dubbo+netty开发rest接口时,如果希望获取IP地址,HttpServletRequest是用不了的,你需要使用netty中的NettyRequestFacade对象,这时,你之前的获取IP地址的方法需要扩展,加一个只......
  • JavaSwing Dialog
    try{BeautyEyeLNFHelper.frameBorderStyle=BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;//UIManager.put("RootPane.setupButtonVisible",false);org.jb2011.lnf.beautyeye.BeautyEyeLNFHelpe......
  • 使用Swing组件
    译自https://docs.oracle.com/javase/tutorial/uiswing/components/index.html课程介绍UsingTop-LevelContainers本章讲解了如何使用JFrame、JDialog和JApplet类共享的功能——内容窗格、菜单栏和根窗格。还讨论了容器层次结构,即顶层容器所包含的组件树。TheJComponent......
  • 11.25 每日总结(适配器模式)
    今天学习适配器模式马上要设计模式考试了,ε=(´ο`*)))唉 定义:适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。 定义: 适配器模式将某个类......
  • 前端必须掌握的设计模式——适配器模式
    目录定义特点举例说明代码实现前端中的应用总结定义        适配器模式(AdapterPattern)属于结构型设计模式。目的是要使接口不兼容的对象能够相互兼容,比如客户端发送的消息有很多类型,如下图的ABC三种类型,发给系统内部去处理,那么如果有10000种类型,系统的负......
  • Swing入门
    https://docs.oracle.com/javase/tutorial/uiswing/index.htmlAbouttheJFCandSwingJFC=JavaFoundationClasses=java基础类用途:1用于构建图形用户界面;2给Java应用添加图形和交互功能为什么叫JFC:MFC=MicrosoftFoundationClassLibraryJFC包含下表特性:FeatureDescr......
  • javax.swing.JFrame介绍
    JFrame简介译自https://docs.oracle.com/javase/8/docs/api/这是Java中java.awt.Frame的扩展版本,增加了对JFC/Swing组件架构的支持。关于如何使用JFrame的任务导向文档,可以在《Java教程》的“如何创建窗口”部分找到。JFrame类与Frame类有一些不兼容之处。与所有......