📄 mainpane.java
字号:
*/
private void dealRecord(Object obj,int type){
if(obj instanceof Record){
Record record = (Record)obj;
FriendUser friendUser = getFriendUserFromList(record.getFromid());
if(friendUser!=null){
newMSG(type);
ChatPane chatPane = chat.get(record.getFromid());
if(chatPane==null){
chatPane = new ChatPane(oos,friendUser,selfUser,true);
chat.put(friendUser.getJqnum(), chatPane);
}
else if(chatPane.isDisplayable()){
chatPane.setFocusable(true);
chatPane.setState(NORMAL);
}
else{
chatPane.setVisible(true);
}
chatPane.showRecord(friendUser.getNickName(),record,Color.BLUE);
}
}
}
/**
* 因为某些原因服务端使得客户端退出。
* @param message 退出的JQMessage对象。
*/
private void causeLetClientQuit(JQMessage message){
closeClient();
JOptionPane.showMessageDialog(null, message.getObj().toString());
System.exit(0);
}
/**
* 书写消息线程。
* 2008-9-27
* @author 达内科技[Tarena Training Group]
* @version 1.0
* @since JDK1.6(建议)
*/
private class WriteThread extends Thread{
private JQMessage message = null;
public WriteThread(JQMessage message) {
this.message = message;
}
public void run() {
try {
if(oos!=null){
oos.writeObject(message);
oos.flush();
}
} catch (IOException e) {
System.out.println("发生异常:"+e.getMessage());
closeClient();
JOptionPane.showMessageDialog(null, "和服务端连接发生错误:"+e.getMessage()+",请重新登录!");
System.exit(0);
}
}
}
/**
* 关闭到服务端的连接。
*/
private void closeClient(){
try {
if(oos!=null)oos.close();oos = null;
if(ois!=null)ois.close();ois = null;
if(client!=null)client.close();client=null;
} catch (IOException e) {
System.out.println("错误:"+e.getMessage());
}
}
/**
* 查找好友窗口。
* 2008-9-27
* @author 达内科技[Tarena Training Group]
* @version 1.0
* @since JDK1.6(建议)
*/
private class FindWindow extends JDialog implements ActionListener{
private JTabbedPane paneFindWay = new JTabbedPane();
private JPanel paneBtn = new JPanel();
private JButton btnFind = new JButton("查找");
private JButton btnClose = new JButton("关闭");
private JButton btnPrevious = new JButton("上一步");
private JButton btnAddFriend = new JButton("加为好友");
private JPanel paneBaseFind = new JPanel();
private CardLayout card = new CardLayout();
private JPanel paneBaseFirst = new JPanel();
private JPanel paneBaseSecond = new JPanel();
private JLabel lblInfo = new JLabel("在此,您可以设置精确的查询条件来查找用户。");
private JRadioButton btnWhoIsOnline = new JRadioButton("看谁在线上");
private JRadioButton btnExactFind = new JRadioButton("精确查找");
private JLabel lblExactFind = new JLabel();
public JLabel lblOnlineNum = new JLabel("当前在线人数 : 未知");
private JLabel lblInfo2 = new JLabel("以下是JQ为您查找到的用户。");
public JTable tableUser = null;
private DefaultTableModel model = new MyDefaultTableModel();
private Color bgColor = new Color(252,254,252);
public FindWindow(Frame owner, boolean modal) {
super(owner, modal);
setTitle("JQ2008 查找/添加好友");
setSize(400,325);
setResizable(false);
Toolkit tk=Toolkit.getDefaultToolkit();
setLocation((tk.getScreenSize().width-getSize().width)/2,(tk.getScreenSize().height-getSize().height)/2);
try {
setIconImage(ImageIO.read(getClass().getResource("/client/images/searchbutton.gif")));
} catch (IOException e) {
System.out.println("错误:"+e.getMessage());
}
init();
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setVisible(true);
dealFindUser(40);
model.setRowCount(0);
}
private void init(){
paneBtn.setLayout(new FlowLayout(FlowLayout.RIGHT,5,5));
paneBtn.add(btnFind);
paneBtn.add(btnClose);
lblInfo.setPreferredSize(new Dimension(350,34));
lblInfo.setHorizontalAlignment(SwingConstants.LEFT);
//lblInfo.setIcon(new ImageIcon(getClass().getResource("../images/searchinfo.gif")));
lblInfo.setIcon(new ImageIcon(getClass().getResource("/client/images/searchinfo.gif")));
ButtonGroup group = new ButtonGroup();
group.add(btnWhoIsOnline);
group.add(btnExactFind);
btnWhoIsOnline.setOpaque(true);
btnWhoIsOnline.setSelected(true);
btnWhoIsOnline.setBackground(bgColor);
btnWhoIsOnline.setPreferredSize(new Dimension(218,20));
btnExactFind.setOpaque(true);
btnExactFind.setBackground(bgColor);
btnExactFind.setPreferredSize(new Dimension(218,20));
lblExactFind.setIcon(new ImageIcon(MainPane.class.getResource("/client/images/searchexact.gif")));
lblOnlineNum.setPreferredSize(new Dimension(338,25));
paneBaseFirst.setLayout(new FlowLayout(FlowLayout.CENTER,0,3));
paneBaseFirst.setOpaque(true);
paneBaseFirst.setBackground(bgColor);
paneBaseFirst.add(lblInfo);
paneBaseFirst.add(btnWhoIsOnline);
paneBaseFirst.add(btnExactFind);
paneBaseFirst.add(lblExactFind);
paneBaseFirst.add(lblOnlineNum);
//paneBaseFirst.add();
lblInfo2.setIcon(new ImageIcon(getClass().getResource("/client/images/searchinfo.gif")));
lblInfo2.setPreferredSize(new Dimension(360,34));
lblInfo2.setOpaque(true);
lblInfo2.setBackground(bgColor);
String[] data = {"账号","昵称","个性签名"};
model.addColumn(data[0]);
model.addColumn(data[1]);
model.addColumn(data[2]);
tableUser = new JTable(model);
TableRowSorter sorter = new TableRowSorter(model);
tableUser.setRowSorter(sorter);
tableUser.setRowHeight(22);
tableUser.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION);
tableUser.setPreferredScrollableViewportSize(new Dimension(360,160));
TableColumn tcJQ = tableUser.getColumn(data[0]);
tcJQ.setPreferredWidth(80);
TableColumn tcNick = tableUser.getColumn(data[1]);
tcNick.setPreferredWidth(90);
TableColumn tcSign = tableUser.getColumn(data[2]);
tcSign.setPreferredWidth(180);
paneBaseSecond.setOpaque(true);
paneBaseSecond.setBackground(new Color(252,254,252));
paneBaseSecond.add(lblInfo2);
paneBaseSecond.add(new JScrollPane(tableUser));
paneBaseFind.setLayout(card);
paneBaseFind.add("first", paneBaseFirst);
paneBaseFind.add("second", paneBaseSecond);
paneFindWay.add("基本查找",paneBaseFind);
//add(new FillWidth(5,5),BorderLayout.NORTH);
add(paneFindWay,BorderLayout.CENTER);
add(new FillWidth(5,5),BorderLayout.EAST);
add(new FillWidth(5,5),BorderLayout.WEST);
add(paneBtn,BorderLayout.SOUTH);
btnFind.addActionListener(this);
btnClose.addActionListener(this);
DefaultTableCellRenderer LblRenderer = new DefaultTableCellRenderer() {
public void setValue(Object value) {
if (value instanceof JLabel) {
JLabel lbl = (JLabel)value;
setIcon(lbl.getIcon());
setText(lbl.getText());
} else {
super.setValue(value);
}
}
};
LblRenderer.setHorizontalAlignment(SwingConstants.LEFT);
tcJQ.setCellRenderer(LblRenderer);
DefaultTableCellRenderer dtc1 = (DefaultTableCellRenderer)tableUser.getCellRenderer(0, 1);
dtc1.setHorizontalAlignment(SwingConstants.CENTER);
DefaultTableCellRenderer dtc2 = (DefaultTableCellRenderer)tableUser.getCellRenderer(0, 1);
dtc2.setHorizontalAlignment(SwingConstants.CENTER);
}
private void dealFindUser(int type){
JQMessage message = new JQMessage();
message.setType(type);
message.setObj(null);
new WriteThread(message).start();
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btnFind){
btnFind.removeActionListener(this);
paneBtn.remove(btnFind);
btnPrevious.addActionListener(this);
btnAddFriend.addActionListener(this);
paneBtn.add(btnPrevious,0);
paneBtn.add(btnAddFriend,1);
paneBtn.validate();
paneBtn.repaint();
card.next(paneBaseFind);
if(btnWhoIsOnline.isSelected()){
dealFindUser(42);
model.setRowCount(0);
}
}
if(e.getSource()==btnClose){
dispose();
return;
}
if(e.getSource()==btnPrevious){
btnPrevious.removeActionListener(this);
btnAddFriend.removeActionListener(this);
paneBtn.remove(btnPrevious);
paneBtn.remove(btnAddFriend);
btnFind.addActionListener(this);
paneBtn.add(btnFind,0);
paneBtn.validate();
paneBtn.repaint();
card.previous(paneBaseFind);
dealFindUser(40);
}
if(e.getSource()==btnAddFriend){
int row = tableUser.getSelectedRow();
if(row==-1){
JOptionPane.showMessageDialog(null, "请选定一个用户!");
return;
}
Object value = tableUser.getValueAt(row, 0);
if(value instanceof JLabel){
Integer jqnum = Integer.parseInt(((JLabel)value).getText());
JQMessage message = new JQMessage();
message.setType(44);
message.setObj(jqnum);
new WriteThread(message).start();
}
System.out.println(value);
}
}
private void addOnlineUser(FriendUser user){
if(isVisible()){
JLabel lblJQNum = new JLabel(user.getJqnum()+"");
lblJQNum.setIcon(new Portrait(user.getPhoto(),user.getState(),false));
Object[] data = {lblJQNum,user.getNickName(),user.getSignature()};
model.addRow(data);
}
}
}
private class MyDefaultTableModel extends DefaultTableModel{
public boolean isCellEditable(int row, int column) {
super.isCellEditable(row, column);
return false;
}
/*public Class getColumnClass(int c) {
if(c==0)
return JLabel.class;
else
return super.getColumnClass(c);
}*/
}
/**
* 系统消息窗口。
* 2008-9-27
* @author 达内科技[Tarena Training Group]
* @version 1.0
* @since JDK1.6(建议)
*/
private class Broadcastwindow extends JDialog implements WindowFocusListener{
private JTextArea txt = new JTextArea("暂无系统消息!");
public Broadcastwindow() {
super();
setTitle("系统消息");
setSize(200,160);
setResizable(false);
setLocation(MainPane.this.getLocationOnScreen().x,MainPane.this.getLocationOnScreen().y+357);
JScrollPane sp = new JScrollPane(txt);
txt.setEditable(false);
txt.setLineWrap(true);
sp.setSize(190, 125);
sp.setLocation(5, 2);
setLayout(null);
add(sp);
addWindowFocusListener(this);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
//setVisible(true);
}
public void windowGainedFocus(WindowEvent e) {}
public void windowLostFocus(WindowEvent e) {
dispose();
}
public void showNow(){
setLocation(MainPane.this.getLocationOnScreen().x,MainPane.this.getLocationOnScreen().y+357);
setVisible(true);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -