package com.swing.layerout; import java.awt.FlowLayout; import java.awt.event.WindowEvent; import java.awt.event.WindowFocusListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class FlowTest extends JFrame{ public FlowTest(){ init(); } public void init(){ this.setSize(400,300); this.setTitle("第一个JFrame窗体"); //this.setIconImage(image); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//这里是简单的处理了用户点击关闭的事件, //如果想复杂的处理话就要使用事件处理机制 JButton jb1 = new JButton("这是第一个按钮"); JLabel lbl1 = new JLabel("这是一个标签,它中间的字不是很多"); JButton jb2 = new JButton("这是第二个按钮,名字一定要很长才可以"); JLabel lbl2 = new JLabel("这..."); JButton jb3 = new JButton("第三个"); JButton jb4 = new JButton("这是第四个按钮,名字也非常的长"); this.setLayout(new FlowLayout());//使用流式布局:特点,从左上角开始,根椐控件的大小根椐加入的顺序 //依次进行显次,如果过长,将自动排入下一列 this.add(jb2); this.add(jb4); this.add(jb3); this.add(jb1); this.add(lbl1); this.add(lbl2); this.setResizable(false);//不能改变窗体大小 this.setVisible(true); this.addWindowFocusListener(new MyFocus()); //注册一个窗体焦点的监听器 } public static void main(String[] args) { new FlowTest(); } /*窗体三种事件: * * 1. 焦点失去 * 2. 开/关窗体 * 3. 窗体状态,比如最大,最小,调整大小 * * 事件处理要用监听器来进行处理,监听器可以有四种写法 * 1. 内置监听器(内部类的方式) ------------------二选 * 2. 自己监听自己,查看 TestJFrame1.java * 3. 外置监听器(外部类)TestJFrame2.java和MyFocus1.java * 4. 匿名类的使用(最麻烦的)TTestJFrame3.java ------------------首选 * * 使用监听器可以发现监听器都是接口,实现其要实现多个方法,代码量大,代码不简洁 * 所以可以使用适配器来解决监听器的问题,适配器其实就是空实现了三个接口的类 * WindowAdatper TestJFrame5.java * * */ //内部类,用处理于窗体焦点的监听器 public class MyFocus implements WindowFocusListener{ @Override public void windowGainedFocus(WindowEvent e) { // TODO Auto-generated method stub System.out.println("游戏正在进行....."); } @Override public void windowLostFocus(WindowEvent e) { // TODO Auto-generated method stub System.out.println("游戏暂停....."); } } }