package gui;
import java.awt.BorderLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class T12 {
/*
* 文本组件用于接受用户输入的信息或向用户展示信息,
*/
public static void main(String[] args) {
JFrame jfjf = new JFrame("聊天窗口");//创建窗体,名称为“聊天窗口”
JButton sendBt;//创建按钮对象sendBt
JTextField inputField;//JTextField(int columns)创建一个具有指定列数的文本框,初始字符串为null
JTextArea chatContent;//JTextArea(int rows,int columns)创建具有指定行和列的空的文本域
// BorderLayout边界布局管理器,东南西北中
jfjf.setLayout(new BorderLayout());
// 创建一个具有指定行和列的空文本域,12行,34列
chatContent = new JTextArea(12,34);
// 设置文本域不可编辑
chatContent.setEditable(false);
// 创建一个滚动面板,将文本域作为其显示组件
JScrollPane sp = new JScrollPane(chatContent);
// 将滚动面板添加到JFrame窗口中央(JFrame窗口布局格式为BorderLayout)
jfjf.add(sp, BorderLayout.CENTER);
// 创建一个JPanel面板
JPanel jpanel = new JPanel();
// 创建一个具有指定列数的文本框,如果不填参数初始字符串为null,这里字符串为20
inputField = new JTextField(20);
// 创建一个发送按钮
sendBt = new JButton("发送");
MygActionListener m = new MygActionListener(chatContent,inputField);
// 为按钮添加事件
sendBt.addActionListener(m);
// 创建一个标签
Label labe = new Label("聊天信息");
// 将标签添加到JPanel面板
jpanel.add(labe);
// 将文本输入框添加到JPanel面板
jpanel.add(inputField);
// 将按钮添加到JPanel面板
jpanel.add(sendBt );
// 将滚动面板和JPanel面板添加到JFrame窗口南部(JFrame窗口布局格式为BorderLayout)
jfjf.add(jpanel, BorderLayout.SOUTH);
jfjf.setSize(400, 400);
jfjf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jfjf.setVisible(true);
}
}
class MygActionListener implements ActionListener {
//主要是想在另一个类里面,使用JLabel的对象,如何使用呢?如何传递同一个实例对象
//为了使用main方法中的lab对象,必须将这个实例通过被使用处的类的构造方法传递过来。
JTextArea chatContent;
JTextField inputField;
public MygActionListener() {
}
public MygActionListener(JTextArea chatContent,JTextField inputField) {
this.chatContent = chatContent;
this.inputField = inputField;
}
public void actionPerformed(ActionEvent e) {
// 获取输入的文本信息
String content = inputField.getText();
// 判断输入的信息是否为空。String类的trim()函数去除了字符串前后两端的所有包括空格、换行、回车、等字符
if(content != null && !content.trim().equals("")) {
// 如果不为空,将输入的文本追加到聊天窗口
chatContent.append("本人:"+content+"\n");
}else {
// 如果为空,提示聊天信息不能为空
chatContent.append("聊天信息不能为空"+"\n");
}
// 将输入后的文本框内容置为空
inputField.setText("");
}
}
结果如下
可能有的电脑输出的是乱码,处理方式如下:
点开run Configurations,将common设置为GBK。到这一步执行就没问题了。
(如果还不行,再点Arguments的VM arguments填入-Dfile.encoding=gbk。点击Apply,再点击run,这样就可以使图片和控制台都正常显示)