博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swing自定义事件-一个组件的事件传递给另一个组件
阅读量:6003 次
发布时间:2019-06-20

本文共 2683 字,大约阅读时间需要 8 分钟。

  hot3.png

1.Swing自定义事件-将一个组件的事件传递给另一个组件.

使用EventListenerList来管理事件,当A组件触发事件的时候,调用方法fireActionPerformed()来触发事件,然后再B组件中 actionPerformed()方法来接收事件.

当在容器KeyTextComponent中按下鼠标,我们就可以在Jframe中捕获触发的事件.

Managing Listener Lists with EventListenerList

import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.util.EventListener;import javax.swing.JComponent;import javax.swing.JFrame;import javax.swing.JTextField;import javax.swing.event.EventListenerList;class KeyTextComponent extends JComponent {  private EventListenerList actionListenerList = new EventListenerList();  public KeyTextComponent() {    KeyListener internalKeyListener = new KeyAdapter() {      public void keyPressed(KeyEvent keyEvent) {        System.out.println("keyPressed");        if (actionListenerList != null) {          int keyCode = keyEvent.getKeyCode();          String keyText = KeyEvent.getKeyText(keyCode);          ActionEvent actionEvent = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, keyText);          fireActionPerformed(actionEvent);//触发事件        }      }    };    MouseListener internalMouseListener = new MouseAdapter() {      public void mousePressed(MouseEvent mouseEvent) {        requestFocusInWindow();      }    };    addKeyListener(internalKeyListener);    addMouseListener(internalMouseListener);  }  public void addActionListener(ActionListener actionListener) {//事件管理    actionListenerList.add(ActionListener.class, actionListener);  }  public void removeActionListener(ActionListener actionListener) {    actionListenerList.remove(ActionListener.class, actionListener);  }  protected void fireActionPerformed(ActionEvent actionEvent) {//触发事件    EventListener listenerList[] = actionListenerList.getListeners(ActionListener.class);    for (int i = 0, n = listenerList.length; i < n; i++) {      ((ActionListener) listenerList[i]).actionPerformed(actionEvent);    }  }  public boolean isFocusable() {    return true;  }}public class KeyTextComponentDemo {  public static void main(String[] args) {    JFrame aWindow = new JFrame();    aWindow.setBounds(30, 30, 300, 300); // Size    aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    KeyTextComponent com = new KeyTextComponent();    aWindow.add(com, "Center");    com.addActionListener(new ActionListener() {      public void actionPerformed(ActionEvent e) {        System.out.println("action");//获取事件      }    });    aWindow.add(new JTextField(), "South");    aWindow.setVisible(true); // Display the window  }}

转载于:https://my.oschina.net/abian/blog/497296

你可能感兴趣的文章
让VMware ESX中的虚拟机随esx开机自动启动
查看>>
Electron Cash钱包存BCH教程
查看>>
自定义key解决zabbix端口监听取值不准确的问题
查看>>
入门级----黑盒测试、白盒测试、手工测试、自动化测试、探索性测试、单元测试、性能测试、数据库性能、压力测试、安全性测试、SQL注入、缓冲区溢出、环境测试...
查看>>
composer 安装 ubuntu 12.04
查看>>
微服务(二)hystrix
查看>>
Performing a thread dump in Linux or Windows--reference
查看>>
推荐系统中常用算法 以及优点缺点对比
查看>>
cocos2d-x v3.2环境配置(现在3.x版本号可以配置该)
查看>>
Go语言标准库之JSON编解码
查看>>
winpcap 发送数据包
查看>>
cisco 出现 %Error opening tftp://255.255.255.255 错误解决办法
查看>>
VIM编辑器
查看>>
IE主页被篡改 地址框变灰
查看>>
linux上架设l2tp+ipsec ***服务器
查看>>
Facebook和用户界面会如何扭曲你说的话
查看>>
安卓混合开发之Cordova,NativeWebView两种实现
查看>>
桶排序
查看>>
如何用windows Live writer 撰写blog
查看>>
RHEL6入门系列之十九,硬盘分区与格式化
查看>>