package test;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Font;
import java.awt.Color;
import javax.swing.ImageIcon;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;

/**
 * 焦点事件的监听： 使用焦点事件的监听模拟点亮灯泡的过程。
 */
public class Focus extends JFrame { // 创建一个“焦点”类，并继承JFrame
	// 声明窗体中的组件
	private JPanel contentPane;
	private JLabel lblTip;
	private JLabel lblLight;

	/**
	 * 主方法
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() { // 使得Runnable中的的run()方法在the
												// system EventQueue的指派线程中被调用
			public void run() {
				try {
					Focus frame = new Focus(); // 创建Flags对象
					frame.setVisible(true); // 使frame可视
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	private class myWindowFocusListener implements WindowFocusListener{
		@Override
		public void windowGainedFocus(WindowEvent arg0) {
			lblLight.setIcon(new ImageIcon(Focus.class.getResource("light.png"))); // 设置标签中的图标，显示灯亮
			lblTip.setText("JFrame窗体获得焦点后，灯亮了..."); // 设置标签中的文本
		}
		@Override
		public void windowLostFocus(WindowEvent arg0) {
			lblLight.setIcon(new ImageIcon(Focus.class.getResource("dark.png"))); // 设置标签中的图标，显示灯灭
			lblTip.setText("JFrame窗体失去焦点后，灯灭了..."); // 设置标签中的文本
		}		
	}
	/**
	 * 创建JFrame窗体
	 */
	public Focus() { // Focus的构造方法
		addWindowFocusListener(new myWindowFocusListener());//为窗体添加焦点事件监听器
		setAutoRequestFocus(false); // JFrame窗体失去焦点
		setResizable(false); // 不可改变窗体大小
		setTitle("焦点事件的监听"); // 设置窗体题目
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体关闭的方式
		setBounds(100, 100, 300, 300); // 设置窗体大小
		/**
		 * 创建JPanel面板contentPane置于JFrame窗体中，并设置面板的背景色、边距和布局
		 */
		contentPane = new JPanel();
		contentPane.setBackground(Color.BLACK);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		/**
		 * 创建标签lblTip置于JFrame窗体中的南侧，设置标签label_1中字体的颜色、样式以及水平居中
		 */
		lblTip = new JLabel("JFrame窗体失去焦点时，灯没亮！");
		lblTip.setForeground(Color.CYAN);
		lblTip.setFont(new Font("微软雅黑", Font.PLAIN, 14));
		lblTip.setHorizontalAlignment(SwingConstants.CENTER);
		contentPane.add(lblTip, BorderLayout.SOUTH);
		/**
		 * 创建标签lblLight置于JFrame窗体中的中间，设置标签label_2中的图标位置和样式
		 */
		lblLight = new JLabel("");
		lblLight.setHorizontalAlignment(SwingConstants.CENTER);
		lblLight.setIcon(new ImageIcon(Focus.class.getResource("dark.png")));
		contentPane.add(lblLight, BorderLayout.CENTER);
	}
}
