Java Swing 依赖注入 思想

import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
public class TestB {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SwingUtilities.invokeLater(()->{
			JFrameTestB frame =new JFrameTestB();
			frame.setVisible(true);
		});
	}

}

class JFrameTestB extends JFrame{
	JButton b1;
	JFrameTestB(){
		setTitle("测试");
		setBounds(500, 200, 300, 300);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		Container c =getContentPane();
		b1 = new JButton("点击按钮");
		// 获取按钮当前字体
		Font currentFont = b1.getFont();
		// 创建新字体,只改变大小,保持其他属性不变
		Font newFont = currentFont.deriveFont(24f);
		// 应用新字体
		b1.setFont(newFont);
		
		b1.addActionListener(new 按钮监听B(this));
		c.add(b1);
	}	
}

class 按钮监听B implements ActionListener{
	public static int i=0;
	//重点代码 依赖注入思想
	JFrameTestB frame;
	按钮监听B(JFrameTestB frame){
		this.frame =frame;
	} 

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		SwingUtilities.invokeLater(()->{
			frame.b1.setText("按鈕"+i);
			i++;
		});
	}
}

重点代码 依赖注入思想

JFrameTestB frame;

按钮监听B(JFrameTestB frame){

this.frame =frame;

}

这种方式有啥好处?

精准打击 - 监听器知道要修改哪个窗口的按钮,不会搞错

解耦合 - 窗口和监听器是两个独立的 "人",但通过参数联系在一起

可复用 - 这个监听器可以给不同的窗口用,只要传入对应的窗口对象

避免静态陷阱 - 不需要用static变量共享数据,更安全

试想一下,假如去掉上面的重点代码,修改按钮内容是多么的麻烦

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值