(这是我对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源码,子组件关联父组件的事件是在运行时才注入的,代码是在父组件中完成的,与子组件原有代码无关,可以看到了父子组件代码在编码阶段是没有关联,只在运行时才出现关联。
分享到:
相关推荐
以下是对这两个关键组件的详细解释: 一、减速器 减速器是一种机械传动装置,主要用于降低旋转电机的转速,同时增加输出扭矩。它由多个齿轮组成,通过齿轮的啮合实现速度转换。减速器的作用主要有以下几点: 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. 飞机重量计算:无燃油重量是商务载重(乘客和货物的重量)加上使用空重...
当发生短路事件时,Q3的集电极电压迅速下降,触发Q2导通并形成自锁机制,即Q2的持续导通会强制Q3进入截止状态,从而切断对负载的供电。此时,无论负载是否存在,电路均不会输出电压,有效地防止了短路造成的电流过载...
此仓库包含“钱包”的前端组件。 其中,电子钱包是一个个人财务管理应用程序,可为用户提供包含其所有关联帐户的汇总仪表板,从而使他们能够监控和预算其个人财务。 这是我网站的扩展,并使用Plaid API处理电子...
8. **切断供应**:针对赖账者,采取断供策略("釜底抽薪"),在IT供应链管理中,这可能意味着暂停向违约供应商提供关键组件或服务,以促使对方遵守协议。 以上策略虽源于债务催收,但它们的核心思想——识别关键...
● 在对采暖控制系统或连接的组件进行操作之前,必须确保系统已断电。 ● 设备连接的电源线应安装有断路器,且该断路器应易于接近并明确与设备相关联。建议断路器靠近设备,以便在紧急情况下迅速切断电源。 设备的...