(这是我对swing mvc探讨的体会之一)
一、子组件与父组件的强关联问题
子组件如果要操作父组件的话,按照一般的编程方法是,将子组件里面实现对父组件的引用。就是这种引用,就把子组件与父组件(以及父组件的关联组件)强关联起来。
有了这种关联的存在,子组件就失去了自由了。
二、swing事件注入的脱藕解决方案
如果是事件是采用运行时“注入”的方式,在运行时由父组件将事件注入子组件。
子组件里面没有出现父组件的直接引用,子组件相对于父组件就是独立的,因此子组件被复用成为可能。
既然是子组件,必然存在与父组件的关联,我这里只讨论事件问题,子组件如何执行父组件的控制(事件)呢?
三、例子
1、先说子组件自己的事件,例如,点击按钮后,按钮闪动一下。显然按钮组件自己可以完成。并且可以不涉及的父(其他)组件。
public class Buttonex extends JButton implements MouseListener {
public Buttonex() {
super();
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("我用自己的事件我晃动了一下!");
}
}
2、与父组件的交互:
例如把按钮放到父组件JPanel中,父组件中有其他组件,点击按钮后,就更改其中的另外一个组件jLabel1的text。
A、如果按照类继承方式来做的话,首先扩展JButton,里面添加 对父组件的引用JPanel jPanel,然后通过扩展JButton事件jPanel.jLabel1
public class Buttonex2 extends JButton implements MouseListener {
JPanel jPanel; //这事父组件的引用
public Buttonex2(JPanel 父组件) {
jPanel=父组件;
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("我晃动了一下");
jPanel.jLabel1.setText("改变了");
}
}
从上面的代码可以看到,Buttonex以后可能就再也不能用了,因为他与jPanel强关联了。
B、下面我们利用swing的事件机制来说明如何脱耦,我们的目的是:最好不要再去动Buttonex,上层组件jPanel的事情自己做。不要干扰其他组件。
public class NewJPanel extends javax.swing.JPanel {
private Buttonex jButton1;
private JLabel jLabel1=new JLabel("我是父组件的其他组件!");
public NewJPanel() {
jButton1 = new Buttonex(this);//吧父组件引入子组件
this.add(jButton1);
jButton1.setText("jButton1");
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
System.out.println("我是父组件添加的事件,我没有直接在子组件中编码。");
//下面操作jButton1的父组件
jLabel1.setText("我被父组件注入到子组件的事件修改了。");
}
});
this.add(jLabel1);
}
}
以上代码不需要修改Buttonex源码,子组件关联父组件的事件是在运行时才注入的,代码是在父组件中完成的,与子组件原有代码无关,可以看到了父子组件代码在编码阶段是没有关联,只在运行时才出现关联。
分享到:
相关推荐
本份“带有次级线圈组件的点火线圈及次级线圈组件连接方法.pdf”文档将提供关于点火线圈的基础知识、工作原理、组件分析等详细信息,并对实际操作中的注意事项进行阐述,旨在提升技术人员和维修工人的专业技能,帮助...
以下是对这两个关键组件的详细解释: 一、减速器 减速器是一种机械传动装置,主要用于降低旋转电机的转速,同时增加输出扭矩。它由多个齿轮组成,通过齿轮的啮合实现速度转换。减速器的作用主要有以下几点: 1. ...
汽车电子控制技术是现代汽车行业的重要组成部分,它通过集成微处理器、传感器和执行机构,实现对汽车各个系统的精确控制,以提升车辆性能、安全性和环保标准。本章主要介绍了汽车电子控制系统的应用、发展、分类以及...
此外,为了确保安全性,电路可能还包括过温保护机制,当温度超过设定阈值时自动切断电源,防止过热对婴儿造成伤害。设计时还需考虑电源管理、电磁兼容性(EMC)和安全性标准,例如IEC 60601等。 综上所述,这份文档...
本主题“002 springCloudAlibaba Sentinel流控-关联”将深入探讨如何在Spring Cloud Alibaba中配置和使用Sentinel进行流量控制。 一、Sentinel核心概念 1. **资源**:Sentinel中的基本单位,通常代表一个服务接口...
描述中的“行业分类-电子政务”可能意味着该文档也包含了电子政务领域的相关性,尽管水暖毯控制电路与电子政务直接关联不大,但可能在智能家电或物联网(IoT)的背景下讨论了产品的联网和数据交换,这是电子政务领域的...
5. 安全功能:例如过热保护,当温度超过安全阈值时自动切断电源,防止火灾风险。 智能电热毯还可能有节能模式,通过学习用户的睡眠习惯,适时降低温度以节省电力。此外,部分产品可能具备连接Wi-Fi或蓝牙的功能,...
在当今迅猛发展的电子工程领域,蓄电池作为提供稳定电力输出的关键组件,其性能的优劣直接关联到整个电力系统的稳定性和效率。为了确保蓄电池能够在最佳状态下运行,电子功用中的恒温箱起到了不可或缺的作用。本文将...
这些机制可能包括热敏电阻、热传感器、智能管理系统等组件,它们能够实时监测电池的温度,并在温度超过安全阈值时立即采取措施,如降低功率输出或自动切断电源,从而有效避免危险情况的发生。 在实际应用中,具有...
水银开关是这种设备的关键组件,它的功能在于根据重力变化来接通或断开电路,实现对点读装置的操作。 水银开关,又称为液态金属开关,是一种依赖于水银流动来形成或断开电路的机械开关。其内部包含一个密封的玻璃管...
此外,还包括了用于液压蓄能器的安装元件(Mounting elements for hydraulic accumulators)以及安全切断块(Safety and shut-off blocks)。 在液压过滤方面,列出了压力过滤器(Pressure filters)、返回线过滤器...
首先,定铁芯作为断路器的核心组件,其对磁场的引导与集中作用至关重要。通过选择高导磁率的材料,可以显著降低磁阻,增加磁通密度,从而加速断路器的开关动作。磁阻的降低意味着在相同的磁场强度下,能够产生更大的...
通过对电流的实时监测,可以预防过载、短路等问题,同时也能优化电机的启停控制和速度调节,提高生产效率和产品质量。 4. **安全与保护**: 电流检测转换电路还承担着保护系统的重任。当检测到异常电流时,如电流...
38. **绝缘电阻 (ぜつえんていこう)**:测量设备或材料对电流流动的阻力,反映其绝缘性能。 39. **水泥电阻 (せめんとていこう)**:使用水泥填充的电阻,具有良好的散热性能。 40. **陶瓷电容器 (せらみっく・こん...
该系统由北京超图地理信息技术有限公司基于其自主研发的全组件式GIS软件平台SuperMap Objects和WebGIS开发平台SuperMap IS构建。其核心目标在于提供疫情数据的录入、分析、预警以及信息发布等功能,帮助疾病控制部门...
3. 保护与监控模块:图中包含了一些用于监测和保护的组件,如RINV_FAULT、SINV_FAULT和TINV_FAULT,这些信号可能与逆变器的故障检测机制相关联,用于在发生过压、过流或其他异常情况时及时切断电源,避免设备损坏。...
在现代科技快速发展的背景下,空调器作为人们日常生活中不可或缺的设备,其内部结构和工作原理的优劣直接关联着设备的稳定性和能效表现。电器盒作为空调器的核心组件之一,承担着重要的电气管理和控制功能,其设计与...
下面将对这些内容进行详细解析。 #### 标准颜色代码 首先,手册中列出了标准的颜色代码,用于区分不同的电线: - **白色** (ws) - **黑色** (sw) - **红色** (ro) - **褐色** (br) - **绿色** (gn) - **蓝色** ...
《飞机系统与附件》这本书涵盖了飞机的多个关键系统和组件,包括燃油系统、液压系统、电气系统等。以下是一些核心知识点的详细说明: 1. 飞机重量计算:无燃油重量是商务载重(乘客和货物的重量)加上使用空重...
当点火开关关闭时,整个系统被切断电源,发动机停止工作;而开启时,电流得以流向点火线圈,启动点火流程。发电机则负责向点火系统及汽车的其他电气设备供电。分电器的作用是将点火线圈产生的高压电合理地分配到每一...