package com.mrsoft.chat;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.Font;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import java.util.Date;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;

/**
 * QQ聊天窗口（文本域、焦点事件以及鼠标单击事件），要求如下：
 * (1)键入的消息须全部显示在文本域中，按“行”区分。
 * (2)文本域只显示消息，不可编辑。"
 * (3)文本域的滚动条只使用纵向的。
 */
public class Chat extends JFrame { //创建一个“聊天”类继承JFrame窗体
	//声明“聊天”类中的成员组件
	private JPanel contentPane;
	private JTextArea tInfo;
	private JButton btnSend;
	private JLabel lblToolBar;
	private JLabel lblShow;
	private JLabel lblTBar;
	private JTextArea tInput;

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

	/**
	 * 创建JFrame窗体
	 */
	public Chat() { //Chat的构造方法
		setResizable(false); //不可改变窗体大小
		setTitle("聊天窗口"); //设置窗体题目
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体关闭的方式
		setBounds(100, 100, 568, 456); //设置窗体大小
		/**
		 * 创建一个JPanel面板contentPane置于JFrame窗体中，并设置面板的边距和布局
		 */
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		/**
		 * 创建一个JButton按钮置于面板contentPane中，初始时，设置按钮不可用；并设置按钮里字体的样式
		 */
		btnSend = new JButton("发　送");
		btnSend.addActionListener(new ActionListener() { //添加动作事件的监听
			StringBuilder builder = new StringBuilder(); //创建StringBuilder对象，用来存储字符串
			@Override
			public void actionPerformed(ActionEvent e) { //发生操作时
				if (!tInput.getText().equals("")) { //当文本域里有内容时
					Date date=new Date(); //创建“日期”类对象
					builder.append(String.format("%tF", date)+"  "+String.format("%tT", date)+"："+tInput.getText()).append("\n"); //向字符串容器中添加字符串并换行
					tInfo.setText(builder.toString()); //文本域显示添加的字符串
					tInput.setText(null); //设置文本域为空
				}
			}
		});
		btnSend.setFont(new Font("微软雅黑", Font.PLAIN, 14));
		btnSend.setBounds(354, 405, 80, 23);
		contentPane.add(btnSend);
		/**
		 * 创建一个JScrollPane面板scrollPane置于面板contentPane中
		 */
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 44, 424, 235);
		contentPane.add(scrollPane);
		/**
		 * 创建文本域tInfo置于面板scrollPane中，禁用横向滚动条并设置文本域tInfo不可编辑
		 */
		tInfo = new JTextArea();
		tInfo.setLineWrap(true);
		scrollPane.setViewportView(tInfo);
		tInfo.setEditable(false);
		/**
		 * 创建标签lblToolBar置于面板contentPane中，设置标签大小并向标签中添加图标
		 */
		lblToolBar = new JLabel("");
		lblToolBar.setIcon(new ImageIcon(Chat.class.getResource("/com/mrsoft/chat/3.png")));
		lblToolBar.setBounds(0, 289, 445, 24);
		contentPane.add(lblToolBar);
		/**
		 * 创建标签lblShow置于面板contentPane中，设置标签大小并向标签中添加图标
		 */
		lblShow = new JLabel("New label");
		lblShow.setIcon(new ImageIcon(Chat.class.getResource("/com/mrsoft/chat/1.png")));
		lblShow.setBounds(444, 0, 119, 428);
		contentPane.add(lblShow);
		/**
		 * 创建标签lblTBar置于面板contentPane中，设置标签大小并向标签中添加图标
		 */
		lblTBar = new JLabel("New label");
		lblTBar.setIcon(new ImageIcon(Chat.class.getResource("/com/mrsoft/chat/2.png")));
		lblTBar.setBounds(0, 0, 445, 33);
		contentPane.add(lblTBar);
		/**
		 * 创建一个JScrollPane面板scrollPane_1面板contentPane中
		 */
		JScrollPane scrollPane_1 = new JScrollPane();
		scrollPane_1.setBounds(10, 323, 424, 74);
		contentPane.add(scrollPane_1);
		/**
		 * 创建文本域tInput置于面板scrollPane_1中，禁用横向滚动条并设置文本域tInput不可编辑
		 */
		tInput = new JTextArea();
		tInput.setLineWrap(true);
		scrollPane_1.setViewportView(tInput);
	}
}
