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变量共享数据,更安全
试想一下,假如去掉上面的重点代码,修改按钮内容是多么的麻烦
3954

被折叠的 条评论
为什么被折叠?



