java建立一个小小留言板
制作如图一个留言板的界面,并按要求加入所需控件,并能按要求进行窗口
控件的布局。并按要求为按钮、文本框、窗口添加事件,使之实现提交显示留言,
清屏,留言至顶和至尾。要求文本框能自动产生滚动条,界面美观。
16
注意:
1、通过两个文本文件存储表情和留言内容。
1)Expression.dat:用于存储表情,如:微笑、大哭、流泪等;每个表情占一行。
2)Msg.dat:用于存储留言信息,留言信息格式为:
[2019-10-04 12:35] 你微笑地说:今天下午去图书馆吗?
其中:时间是提交留言的时间,每条留言一行。
2、窗口启动的时候(或点击“查看”按钮时),从 Msg.dat 文件中读出所有留言
记录,显示在文本框中;从 Expression.dat 文件中读出所有表情记录,显示在
表情下拉列表中。将 Msg.dat 中所有留言记录,倒序显示在文本域中。
3、点击提交按钮,将表单内容存入文件,同时刷新文本框的留言内容。
4、“清屏”代表清除留言框内容,“至顶”和“至尾”功能是当留言内容过多时,
将滚动条滚动到最上面或最下面,实现过程为移动文本区域里面的光标,使
其指向第一个位置和最后一个位置。(设置光标位置函数为:setCaretPosition(int 位置))
V
//以下是Demo类
public class FrameplusDemo {
public static void main(String[]args) {
Frameplus fr = import java.awt.*;
import java.applet.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Frameplus extends JFrame implements ActionListener,KeyListener{
JTextArea t1;
JButton but1,but2,but3,but4,but5,but6;
JComboBox looks;
JTextField lo;
JLabel lbl1,lbl2,lbl3;
public Frameplus (String title) {
super(title);
this.setSize(1000,600);
this.winInit();
}
public void winInit() {
lbl1 = new JLabel("留言板",0);
lbl2 = new JLabel("你");
lbl3 = new JLabel("地说:");
t1 = new JTextArea("留言内容:\n");
t1.setEditable(false);//设置留言板内容不可更改
t1.setBackground(new Color(0xFF,0xFF,0xEE));//设置留言版的背景色
t1.setForeground(new Color(0,0,255));//设置留言板字体颜色
lo = new JTextField(35);//设置输入框长度
looks = new JComboBox();
//looks.addItem("哭着");
//looks.addItem("笑着");
//looks.addItem("哈哈哈哈");
//looks.addItem("乐呵呵");
//looks.addItem("笑嘻嘻");
this.loadExp(); //文件加载表情
but1 = new JButton("提交");
but2 = new JButton("清屏");
but3 = new JButton("至顶");
but4 = new JButton("至尾");
but5 = new JButton("查看");
but6 = new JButton("删除");
lbl1.setFont(new Font("宋体",Font.BOLD,20));
lbl2.setFont(new Font("宋体",Font.BOLD,20));
lbl3.setFont(new Font("宋体",Font.BOLD,20));
t1.setFont(new Font("宋体",Font.BOLD,20));
lo.setFont(new Font("宋体",Font.BOLD,20));
but1.setFont(new Font("宋体",Font.BOLD,20));
but2.setFont(new Font("宋体",Font.BOLD,20));
but3.setFont(new Font("宋体",Font.BOLD,20));
but4.setFont(new Font("宋体",Font.BOLD,20));
but5.setFont(new Font("宋体",Font.BOLD,20));
but6.setFont(new Font("宋体",Font.BOLD,20));
looks.setFont(new Font("宋体",Font.BOLD,20));
but1.addActionListener(this); //提交
but2.addActionListener(this); //清屏
but3.addActionListener(this); //至顶
but4.addActionListener(this); //至尾
but5.addActionListener(this); //查看
but6.addActionListener(this); //删除
lo.addKeyListener(this);
//创建不同面板
JPanel pEast = new JPanel();
JPanel pSouth = new JPanel();
JScrollPane scroll = new JScrollPane(t1);//加滚轮
pEast.setLayout(new GridLayout(8,1,0,30));//东方为网格布局
//面板
pSouth.add(lbl2);pSouth.add(looks);
pSouth.add(lbl3);pSouth.add(lo);
pSouth.add(but1);
pEast.add(but2);pEast.add(but3);
pEast.add(but4);pEast.add(but5);
pEast.add(but6);
//将面板加入窗口
add(scroll,"Center");
add(lbl1,"North");
add(pEast,"East");
add(pSouth,"South");
this.loadMsg(); //加载文件中的内容
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
//加载文件中的表情
public void loadExp() {
looks.removeAllItems();
try {
FileReader Re = new FileReader("Expression.dat");
BufferedReader br = new BufferedReader(Re);
String exp = " ";
while((exp = br.readLine())!=null){
looks.addItem(exp);
}
br.close();
}catch(IOException e1) {
System.out.println("读取文件失败"+e1);
}
}
//加载文件中的留言内容
public void loadMsg() {
t1.setText("留言内容:\n");
try {
BufferedReader br = new BufferedReader(new FileReader("msg.dat"));
String msg = " ";
while((msg = br.readLine())!=null) {
t1.insert(msg+"\n", 6);
}
br.close();
}catch(IOException e1) {
System.out.println("读文件失败"+e1);
}
}
//提交留言过程
public void msgSubmit() {
if(lo.getText().trim().length()==0) return;
//获取当前时间
Date crr = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss");
String curr = sdf.format(crr);
String loms = "["+curr+"]"+"你"+looks.getSelectedItem()+"地说:"+lo.getText();
t1.insert(loms+"\n", 6);
//写入msg.dat文件
File f = new File("Msg.dat");
try {
FileWriter fw = new FileWriter(f,true);//追加
fw.write(loms+"\r\n");
fw.close();
}catch(IOException e1) {
System.out.println("写入文件失败"+e1);
}
lo.setText("");
}
public void dete() {
String lom = " ";
File f = new File("Msg.dat");
try {
FileWriter fw = new FileWriter(f);//追加
fw.write(lom+"\r\n");
fw.close();
}catch(IOException e1) {
System.out.println("写入文件失败"+e1);
}
}
public void actionPerformed(ActionEvent e) {
String com = e.getActionCommand();
switch(com) {
case "提交":{
msgSubmit();
break;
}
case "清屏":{
t1.setText("留言内容:\n");
break;
}
case "至顶":{
t1.setCaretPosition(0);
break;
}
case "至尾":{
t1.setCaretPosition(t1.getText().length()-1);
break;
}
case "查看":{
this.loadMsg();
break;
}
case "删除":{
this.dete();
break;
}
}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode()==10) {
msgSubmit();
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
}
Vnew Frameplus("小小留言板");
fr.setVisible(true);
}
}
还有两个文件存表情(Expression.dat)和留言记录(msg.dat)
表情文件可以里要记录“表情”用于导入留言框中的表情复选框中
//附上运行成功的小小留言板
(留言板上的删除按钮没有什么实际功能,只是当留言多了之后,将文件清空…强迫症 哈哈哈)