📄 chatsystem.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.io.*;
import java.util.Vector;
import java.util.List;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.table.*;
//import java.awt.image.BufferedImage;
/**
* @author yeeku.H.lee kongyeeku@163.com
* @version 1.0
* <br>Copyright (C), 2005-2008, yeeku.H.Lee
* <br>This program is protected by copyright laws.
* <br>Program Name:
* <br>Date:
*/
public class ChatSystem extends JPanel
{
private InfoSave infoSave;
private Person person;
private JTextArea showMes = new JTextArea("欢迎来到zlt的五子棋世界");
private JTextArea showMesPrivate = new JTextArea();
private JTextField chat = new JTextField();
private JButton send;
private JComboBox cb = new JComboBox();
private PrintStream ps;
private JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
private JTabbedPane tabbedhead = new JTabbedPane(JTabbedPane.TOP);
private JScrollPane scroll = new JScrollPane(showMes);
private JScrollPane scrollPrivate = new JScrollPane(showMesPrivate);
private JPanel panelButton = new JPanel();
private JScrollBar scrollBar;
private boolean inGame = false;
private int tableNumber;
PlayersModel playersModel = new PlayersModel();
JTable table = new JTable(playersModel);
private JScrollPane scrollPane = new JScrollPane(table);
//游戏中的聊天室
public ChatSystem(boolean inGame , int tableNumber)
{
this.tableNumber = tableNumber;
this.inGame = inGame;
}
//大厅中的聊天室
public ChatSystem()
{
}
public void init()
{
person = new Person(this.infoSave);
person.setPreferredSize(new Dimension(300,340));
tabbedPane.addTab("所有信息" , new ImageIcon("fiveStone\\ie.gif") , scroll , "显示所有的信息");
tabbedPane.addTab("私聊信息" , new ImageIcon("fiveStone\\xnview.gif") , scrollPrivate , "只显示私聊的信息");
tabbedhead.addTab("房间信息" , new ImageIcon("fiveStone\\vmware.gif") , scrollPane);
tabbedhead.addTab("个人信息" , new ImageIcon("fiveStone\\emule_01.gif") , person);
showMesPrivate.setForeground(new Color(123,80,163));
showMesPrivate.setBackground(new Color(200,221,242));
cb.addItem("所有人");
table.setBackground(Color.white);
table.setRowHeight(32);
tabbedPane.setPreferredSize(new Dimension(300,255));
tabbedhead.setPreferredSize(new Dimension(300,340));
send = new JButton("发送");
JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
JPanel panelWhole = new JPanel();
JPanel panelSplit = new JPanel();
panelButton.setBorder(BorderFactory.createEtchedBorder() );
panelButton.setPreferredSize(new Dimension(300 , 50));
panelButton.setBackground(new Color(200,221,242));
//----------制造容器的边界----------//
chat.setBorder(BorderFactory.createTitledBorder(BorderFactory
.createLineBorder(new Color(40, 106, 196), 1),"输入信息",
TitledBorder.DEFAULT_JUSTIFICATION,
TitledBorder.DEFAULT_POSITION, new Font("Dialog",
Font.BOLD, 12), new Color(40, 106, 196)));
showMes.setForeground(new Color(255, 255, 255));
showMes.setBackground(new Color(82, 128, 173));
chat.setPreferredSize(new Dimension(300,40));
send.setPreferredSize(new Dimension(60,25));
showMes.setEditable(false);
showMesPrivate.setEditable(false);
BorderLayout border = new BorderLayout();
panelSplit.setLayout(border);
panelSplit.add(tabbedPane , border.NORTH);
panelSplit.add(chat);
panelSplit.add(panelButton , border.SOUTH);
panelButton.setLayout(new FlowLayout(FlowLayout.CENTER , 30 , 10));
panelButton.add(cb);
panelButton.add(send);
panelWhole.setLayout(new BorderLayout());
panelWhole.add(panelSplit);
panelWhole.add(panelButton , border.SOUTH);
split.setBottomComponent(panelWhole);
split.setTopComponent(tabbedhead);
this.add(split);
this.setMinimumSize(new Dimension(300 , 300));
this.setVisible(true);
clickEvent();
}
public void showMes(String msg)
{
this.showMes.append("\n" + msg);
//滚条移到最底
scrollBar = scroll.getVerticalScrollBar();
scrollBar.setValue(scrollBar.getMaximum());
}
public void showMesPrivate(String msg)
{
this.showMesPrivate.append(msg + "\n");
//滚条移到最底
scrollBar = scroll.getVerticalScrollBar();
scrollBar.setValue(scrollBar.getMaximum());
scrollBar = scrollPrivate.getVerticalScrollBar();
scrollBar.setValue(scrollBar.getMaximum());
}
public void comboBoxAddItem(Object anObject)
{
cb.addItem(anObject);
}
public void comboBoxRemoveItem(Object anObject)
{
cb.removeItem(anObject);
}
public int comboBoxGetItemCount()
{
return cb.getItemCount();
}
public void clickEvent()
{
send.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
sendMessage();
}
});
chat.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_ENTER)
{
sendMessage();
}
}
});
}
public void sendMessage()
{
try
{
//对所有人说
if (chat.getText().length() == 0)
{
return;
}
infoSave.setMessage(chat.getText());
ps = new PrintStream(infoSave.getSocket().getOutputStream());
//在大厅中发信息
if (!inGame)
{
if (cb.getSelectedIndex() == 0)
{
ps.println(MyProtocol.MSG_ROUND + infoSave.getUserName() + " 对大家说:" +
infoSave.getMessage() + MyProtocol.MSG_ROUND);
}
else
{
String name = (String)cb.getSelectedItem();
ps.println(MyProtocol.MSG_PRIVATE + name + MyProtocol.NAME_MSG + infoSave.getUserName() +
" 对 " + name + "说:" + infoSave.getMessage() + MyProtocol.MSG_PRIVATE);
}
chat.setText("");
}
//在游戏中发信息
else
{
ps.println(MyProtocol.GAME_MSG + this.tableNumber + "," + infoSave.getUserName() + " 说:" +
infoSave.getMessage() + MyProtocol.GAME_MSG);
chat.setText("");
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
//-----------tableModel设置修改表格的各种信息----------//
class PlayersModel extends AbstractTableModel
{
private int idIndex = 3;
private Vector player = null;
private String[] title_name = { "头像", "昵称", "性别"};
public PlayersModel()
{
player = new Vector();
}
public PlayersModel(int count)
{
player = new Vector(count);
}
public void addPlayer(ImageIcon headIcon, String name, String sex)
{
Vector v = new Vector(3);
v.add(0, headIcon);
v.add(1, name);
v.add(2, sex);
player.add(v);
}
public void removePlayer(int row)
{
player.remove(row);
}
public void removePlayer(String name)
{
for (Object o : player)
{
Vector v = (Vector)o;
if (v.get(1).equals(name))
{
player.remove(v);
return;
}
}
}
public boolean isCellEditable(int rowIndex, int columnIndex)
{
return false;
}
//----------使修改的内容生效----------//
public void setValueAt(Object value, int row, int col)
{
((Vector) player.get(row)).remove(col);
((Vector) player.get(row)).add(col, value);
this.fireTableCellUpdated(row, col);
}
public String getColumnName(int col)
{
return title_name[col];
}
public int getColumnCount()
{
return title_name.length;
}
public int getRowCount()
{
return player.size();
}
public Object getValueAt(int row, int col)
{
return ((Vector) player.get(row)).get(col);
}
//返回数据类型
public Class getColumnClass(int col)
{
return getValueAt(0, col).getClass();
}
}
public void inGame()
{
this.inGame = true;
}
public void setTableSize(int w , int h)
{
tabbedhead.setPreferredSize(new Dimension(w , h));
}
public void setTabbedPaneSize(int w , int h)
{
tabbedPane.setPreferredSize(new Dimension(w , h));
}
public void setChatSize(int w , int h)
{
chat.setPreferredSize(new Dimension(w , h));
}
public void setButtonSize(int w , int h)
{
panelButton.setPreferredSize(new Dimension(w , h));
}
public void setInfoSave(InfoSave infoSave)
{
this.infoSave = infoSave;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -