?? chatinterface.java
字號:
package client;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Timer;
import java.util.Vector;
import javax.swing.DefaultListModel;
import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;
import javax.swing.ListSelectionModel;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import com.swtdesigner.SwingResourceManager;
/**
* 和好友聊天的界面
*
* @author user
*
*/
public class ChatInterface extends JFrame {
static int selectedIndex = -1;
public JList list;
public DefaultListModel listModel;
/**
* Create the frame
*/
public ChatInterface(final DataOutputStream sendToServer) {
super();
setResizable(false);
getContentPane().setLayout(
new FormLayout("default:grow(1.0)",
"fill:255dlu, fill:8dlu:grow(1.0)"));
setBounds(100, 100, 167, 490);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JScrollPane scrollPane = new JScrollPane();
getContentPane().add(
scrollPane,
new CellConstraints(1, 1, 1, 2, CellConstraints.FILL,
CellConstraints.FILL));
list = new JList();
list.setFixedCellHeight(20);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setFont(new Font("宋體", Font.PLAIN, 12));
list.setAutoscrolls(false);
list.setCellRenderer(new MyCellRenderer());
setListValue();
scrollPane.setViewportView(list);
addWindowListener(new WindowAdapter() {
public void windowClosed(final WindowEvent e) {
try {
sendToServer.writeUTF("Exit@" + Client.number);
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
list.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getButton() == 1) {
if (e.getClickCount() == 2) {
String selectedValue = (String) (list
.getSelectedValue());
if (!(new Integer(selectedValue.substring(0,
selectedValue.indexOf("@"))))
.equals(Client.number)) {
Integer messengerNumber = new Integer(selectedValue
.substring(0, selectedValue.indexOf("@")));
String messengerName = selectedValue.substring(
selectedValue.indexOf("@") + 1,
selectedValue.lastIndexOf("@"));
Timer timer = Client.timerHashtable
.get(messengerNumber);
if (timer != null) {
Client.timerHashtable.get(messengerNumber)
.cancel();
Client.timerHashtable.remove(messengerNumber);
int index = -2;
index = listModel.indexOf(messengerNumber
+ "@"
+ messengerName
+ "@"
+ Client.friendIcon
.get(messengerNumber));
if (index == -1) {
index = listModel.indexOf(messengerNumber
+ "@" + messengerName + "@"
+ "bai.gif");
}
listModel.setElementAt(messengerNumber
+ "@"
+ messengerName
+ "@"
+ Client.friendIcon
.get(messengerNumber), index);
TalkInterface talkInterface = Client.talkInterfaces
.get(messengerNumber);
if (talkInterface == null) {
String title = Client.goodFriends
.get(Client.number)
+ " 和 " + messengerName + " 聊天";
talkInterface = new TalkInterface(
sendToServer);
talkInterface.setTitle(title);
talkInterface.talkingNumber = messengerNumber;
talkInterface.talkingFriends
.add(messengerNumber);
Vector<String> leaveMessenge = Client.messengeOfFriends
.get(messengerNumber);
for (int i = 0; i < leaveMessenge.size(); i++) {
talkInterface.textPane
.setText(talkInterface.textPane
.getText()
+ messengerName
+ leaveMessenge.get(i)
+ "\n");
}
talkInterface.textPane
.setSelectionStart(talkInterface.textPane
.getText().length());
Client.messengeOfFriends
.remove(messengerNumber);
talkInterface.setVisible(true);
Client.talkInterfaces.put(messengerNumber,
talkInterface);
Vector<String> talking = new Vector<String>();
for (int i = 0; i < talkInterface.talkingFriends
.size(); i++) {
talking
.add(talkInterface.talkingFriends
.get(i)
+ "@"
+ Client.goodFriends
.get(talkInterface.talkingFriends
.get(i)));
}
talkInterface.list.setListData(talking);
}
} else {
TalkInterface talkInterface = Client.talkInterfaces
.get(messengerNumber);
if (talkInterface == null) {
String title = Client.goodFriends
.get(Client.number)
+ " 和 " + messengerName + " 聊天";
talkInterface = new TalkInterface(
sendToServer);
talkInterface.setTitle(title);
talkInterface.textPane
.setSelectionStart(talkInterface.textPane
.getText().length());
talkInterface.setVisible(true);
talkInterface.talkingNumber = messengerNumber;
talkInterface.talkingFriends
.add(messengerNumber);
Client.talkInterfaces.put(messengerNumber,
talkInterface);
Vector<String> talking = new Vector<String>();
for (int i = 0; i < talkInterface.talkingFriends
.size(); i++) {
talking
.add(talkInterface.talkingFriends
.get(i)
+ "@"
+ Client.goodFriends
.get(talkInterface.talkingFriends
.get(i)));
}
talkInterface.list.setListData(talking);
} else {
Client.talkInterfaces.get(messengerNumber)
.setAlwaysOnTop(true);
}
}
}
}
}
}
});
}
private void setListValue() {
Object[] keyArray = Client.goodFriends.keySet().toArray();
Vector<String> friends = new Vector<String>();
listModel = new DefaultListModel();
for (int i = keyArray.length - 1; i >= 0; i--) {
friends.add(keyArray[i] + "@"
+ (String) (Client.goodFriends.get(keyArray[i])) + "@"
+ Client.friendIcon.get(keyArray[i]));
listModel.addElement(keyArray[i] + "@"
+ (String) (Client.goodFriends.get(keyArray[i])) + "@"
+ Client.friendIcon.get(keyArray[i]));
}
list.setModel(listModel);
}
class MyCellRenderer extends JLabel implements ListCellRenderer {
public Component getListCellRendererComponent(JList list, Object value,
int index, // cell index
boolean isSelected, // is the cell selected
boolean cellHasFocus) // the list and the cell have the focus
{
String s = value.toString();
setText(s.substring(s.indexOf("@") + 1, s.lastIndexOf("@")));
String icon = s.substring(s.lastIndexOf("@") + 1);
Icon imageIcon = SwingResourceManager.getIcon(ChatInterface.class,"/images/" + icon);
setIcon(imageIcon);
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
setEnabled(list.isEnabled());
setFont(list.getFont());
setOpaque(true);
return this;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -