📄 好友列表_bcp.java
字号:
//好友列表.java
/**
@author Joedan hongguangming@sohu.com
*/
import java.awt.event.*;
import javax.swing.*;
import myevent.*;
import java.awt.*;
import java.util.*;
class 好友列表 extends JList
{
好友列表()
{
super();
setModel(Model);
// 设置独特的渲染方式,能区别在线,不在线,被选三种状态
setCellRenderer(new MyCellRenderer());
// 设置鼠标双击通知机制
addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if (e.getClickCount() == 2 && 监视器 != null)
监视器.好友列表鼠标双击处理(((列表项)getSelectedValue()).id);
}
});
}
public void 添加事件监视器(好友列表事件监视器 _监视器)
{
监视器 = _监视器;
}
public void 添加好友(String id, String name)
{
列表.put(id, new 列表项(id, name));
Model.addElement(列表.get(id));
}
public void 好友上线(String id)
{
列表项 tmp = (列表项)列表.get(id);
tmp.online = true;
int iTmp = Model.indexOf(tmp);
Model.refresh(iTmp, iTmp);
}
public void 好友下线(String id)
{
列表项 tmp = (列表项)列表.get(id);
tmp.online = false;
int iTmp = Model.indexOf(tmp);
Model.refresh(iTmp, iTmp);
}
public void 删除好友(String id)
{
Model.removeElement(列表.get(id));
列表.remove(id);
}
public void 清除好友列表()
{
Model.clear();
列表.clear();
}
private class 列表项
{
列表项(String _id, String _name)
{
id = _id;
name = _name;
}
String id,//
name;//
boolean online = false;
}
private Color clrOnLine = Color.blue,//在线时字的颜色
clrOffLine = Color.gray,//不在线时字的颜色
clrSelected = Color.orange;//选中时字的颜色
private Font font = new Font("system", 0, 18);
private class MyCellRenderer extends JLabel implements ListCellRenderer
{
public Component getListCellRendererComponent(
JList list,
Object value,// value to display
int index,// cell index
boolean isSelected,// is the cell selected
boolean cellHasFocus)// the list and the cell have the focus
{
列表项 tmp = (列表项)value;
setText(tmp.name);
if (tmp.online)
setForeground(clrOnLine);
else
setForeground(clrOffLine);
if (isSelected)
setForeground(clrSelected);
setFont(font);
setOpaque(true);//??用途
return this;
}
}
private class MyListModel extends DefaultListModel
{
public void refresh(int frm, int to)
{
fireContentsChanged(this, frm, to);
}
}
private MyListModel Model = new MyListModel();
private 好友列表事件监视器 监视器;
private Hashtable 列表 = new Hashtable();//存放id和“列表项”类对象的对照
public static void main(String args[])
{
JFrame win = new JFrame("好友列表测试");
final 好友列表 list = new 好友列表();
list.添加事件监视器(new 好友列表事件监视器()
{
public void 好友列表鼠标双击处理(String ID)
{
System.out.println(ID + "is double clicked");
}
}
);
JButton btn = new JButton("上线");
btn.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
list.好友上线("413");
}
}
);
list.添加好友("413", "Joe");
list.添加好友("10000", "test");
win.add(list, "Center");
win.add(btn, "South");
win.setSize(400, 300);
win.setVisible(true);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -