📄 userroomform.java
字号:
package qianqian.p2pchat.gui;
import qianqian.p2pchat.constant.Const;
import qianqian.p2pchat.control.*;
import qianqian.p2pchat.message.UserMessage;
public class UserRoomForm extends RoomForm {
private static final long serialVersionUID = 1L;
private javax.swing.JScrollPane frndListScroller;
private javax.swing.JMenuBar menuBar;
private javax.swing.JMenu menu;
private javax.swing.JTextField localSearch;
private javax.swing.JMenuItem searchFrnd;
private javax.swing.JMenuItem deleteFrnd;
private javax.swing.JMenuItem updateUser;
private javax.swing.JMenuItem registUser;
private javax.swing.JMenuItem systemQuit;
private java.awt.Color color;
private javax.swing.border.MatteBorder border;
private FriendTree nickList;
private static UserRoomForm userForm;
private boolean hidenX = false;
private boolean hidenY = false;
private java.awt.Dimension screen;
public static synchronized UserRoomForm getInstance(Peer peer) {
if (userForm == null)
userForm = new UserRoomForm(peer);
return userForm;
}
private UserRoomForm(Peer me) {
initComponents();
addListener();
updateList(me.getFriends(), true);
setBounds((int) screen.getWidth() - 195, 0, 195, 450);
requestFocus();
setAlwaysOnTop(true);
setResizable(false);
}
public void dispose() {
userForm = null;
super.dispose();
Controller.getInstance().quit();
}
private void addListener() {
// 关闭窗口
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowQuit());
java.awt.event.ActionListener listener = new java.awt.event.ActionListener() {
public void actionPerformed(final java.awt.event.ActionEvent evt) {
if (evt.getSource() == systemQuit) {
dispose();
return;
}
new Thread(new Runnable() {
public void run() {
if (evt.getSource() == searchFrnd) {
SearchForm.getInstance(UserRoomForm.this)
.setVisible(true);
return;
}
if (evt.getSource() == deleteFrnd) {
dealDelete();
return;
}
if (evt.getSource() == updateUser) {
ModifyForm.getInstance(UserRoomForm.this)
.setVisible(true);
return;
}
if (evt.getSource() == registUser) {
RegisterForm.getInstance(userForm).setVisible(true);
return;
}
if (evt.getSource() == systemQuit) {
dispose();
}
}
}).start();
}
};
searchFrnd.addActionListener(listener);
deleteFrnd.addActionListener(listener);
updateUser.addActionListener(listener);
registUser.addActionListener(listener);
systemQuit.addActionListener(listener);
// 键盘响应
java.awt.event.KeyAdapter keyAdapter = new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
if (evt.getKeyChar() == '\n') {
new Thread(new Runnable() {
public void run() {
String match = localSearch.getText();
localSearch.setText("");
dealSearch(match);
}
}).start();
return;
}
}
};
localSearch.addKeyListener(keyAdapter);
}
private void initComponents() {
screen = getToolkit().getScreenSize();
frndListScroller = new javax.swing.JScrollPane();
nickList = new FriendTree();
frndListScroller = new javax.swing.JScrollPane();
menuBar = new javax.swing.JMenuBar();
menu = new javax.swing.JMenu("菜单");
color = new java.awt.Color(145, 200, 255);
border = new javax.swing.border.MatteBorder(new java.awt.Insets(2, 3,
2, 3), color);
localSearch = new javax.swing.JTextField();
menuBar = new javax.swing.JMenuBar();
menuBar.setBackground(color);
menu = new javax.swing.JMenu("菜单");
searchFrnd = new javax.swing.JMenuItem("查找用户");
deleteFrnd = new javax.swing.JMenuItem("删除好友");
updateUser = new javax.swing.JMenuItem("修改信息");
registUser = new javax.swing.JMenuItem("注册账号");
systemQuit = new javax.swing.JMenuItem("关闭程序");
frndListScroller.setAutoscrolls(true);
frndListScroller.setViewportView(nickList);
getContentPane().add(frndListScroller, "Center");
nickList.setBorder(border);
localSearch.setBorder(border);
menu.add(searchFrnd);
menu.add(deleteFrnd);
menu.add(updateUser);
menu.add(registUser);
menu.add(systemQuit);
menuBar.add(menu);
menuBar.add(new javax.swing.JLabel(new javax.swing.ImageIcon(
"icons/search.gif")));
menuBar.add(localSearch);
setJMenuBar(menuBar);
if (Controller.getInstance().getMe().getGender() == '男') {
setIconImage(new javax.swing.ImageIcon("icons/QG.gif").getImage());
} else {
setIconImage(new javax.swing.ImageIcon("icons/QM.gif").getImage());
}
pack();
}
private void dealDelete() {
int i = nickList.getRowForPath(nickList.getSelectionPath()) - 1;
if (i < 0)
return;
Peer me = Controller.getInstance().getMe();
Peer frnd = me.getFriends().get(i);
int result = javax.swing.JOptionPane.showConfirmDialog(this, "确定删除好友:"
+ frnd.toString() + "?", "提示",
javax.swing.JOptionPane.YES_NO_OPTION);
if (result == 0) {
UserMessage msg = new UserMessage(Const.CODE_DELETE_FRIEND, me,
frnd.getUserId());
Controller.getInstance().getUdpDispatcher().dispatchToServer(msg,
Const.UdpIp);
}
}
private void dealSearch(String match) {
SearchForm.getInstance(this).setSearchText(match);
SearchForm.getInstance(this).setVisible(true);
}
public void updateList(java.util.LinkedList<Peer> iPeers, boolean arg) {
if(iPeers != null)
nickList.update(iPeers, arg);
}
public void delFriend(String id) {
java.util.LinkedList<Peer> frnds = Controller.getInstance().getMe()
.getFriends();
java.util.Iterator<Peer> friends = frnds.iterator();
while (friends.hasNext()) {
if (friends.next().getUserId().equals(id)) {
friends.remove();
}
}
updateList(frnds, false);
}
public void addFriend(Peer peer) {
java.util.LinkedList<Peer> friends = Controller.getInstance().getMe()
.getFriends();
friends.add(peer);
updateList(friends, true);
}
public void newFrndMsg(Peer peer) {
Object[] options = { "同\0意", "拒\0绝" };
int rst = javax.swing.JOptionPane.showOptionDialog(this, peer
.toString()
+ "加你为好友!", "好友信息", javax.swing.JOptionPane.DEFAULT_OPTION,
javax.swing.JOptionPane.INFORMATION_MESSAGE, null, options,
options[0]);
if (rst == 0) {
UserMessage msg = new UserMessage(Const.CODE_ADD_FRIEND, Controller
.getInstance().getMe(), peer.getUserId());
Controller.getInstance().getUdpDispatcher().dispatchToServer(msg,
Const.UdpIp);
addFriend(peer);
}
}
private class WindowQuit extends java.awt.event.WindowAdapter {
// 隐藏到屏幕外
public void windowDeactivated(java.awt.event.WindowEvent e) {
int x = getLocation().x;
int y = getLocation().y;
if (x >= screen.getWidth() - 195) {
setLocation((int) screen.getWidth() - 6, y);
hidenX = true;
} else if (y <= 0) {
setLocation(x, 6 - 450);
hidenY = true;
}
}
// 窗口恢复显示
public void windowActivated(java.awt.event.WindowEvent e) {
int x = getLocation().x;
int y = getLocation().y;
if (hidenX) {
setLocation(x - 195 + 6, y);
hidenX = false;
} else if (hidenY) {
setLocation(x, y + 450 - 6);
hidenY = false;
}
}
// 关闭程序
public void windowClosing(java.awt.event.WindowEvent e) {
dispose();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -