就像QQ登陆时候选择不同状态,每个状态由一个图片和一个字符串组成,这种组件怎么做?
我想的是每个选项用一个JLabel做,每个JLabel由一个图片和一串文字组成.把这几个JLabel添加到JComboBox里,但是做出了不正常.
这个上面显示的2个JLabel就是我添加到JComboBox里的.但是在JComboBox里显示出来的是:"javax.swing.JLabe[,99,20,51*18,alignmentx=0.0,alignmenty=0.0,bordder=,.........]"
JComboBox的getItem()方法,中的参数不是说可以是任何对象吗
我用JLabel数组来做还是不行.也是那样显示.
告诉我怎么做.是却什么?或者用其他方法做?
你好
刚查了一下 希望能够帮到你
摘自: http://topic.csdn.net/t/20050427/17/3971261.html
用ListCellRender interface,里面只有一个方法,只要实现这个方法就可以了!!
将JList中的第一项目当作JLabel,因为JLabel加图和文字很方便。
如:list.setCellRenderer(new CellRenderer_1);
class CellRenderer_1 extends JLabel implements ListCellRenderer{
CellRenderer_1(){}
public Component getListCellRendererComponent(Jlist list,//所要上图的JLIST
Object value,//JList项目的值
int index, //为JList项目的索引值,
boolean isSelect,//是否被选
boolean cellHasFocus){//是否有焦点置入
if(value!= null){
setText(value.toString());
setIcon();//加图
}
if(isSelected){
//setBackground(----);
//setForeground(----);
}
}
}
上面这个是给list加代图片的项 代码给的不是很全 下面还有一个Tree的 重要的是这段代码
this.setCellRenderer(new MyTreeCellRenderer()); //生成图标 《-------------------这里
protected class MyTreeCellRenderer extends JPanel implements TreeCellRenderer {
JCheckBox check = new JCheckBox();
BorderLayout borderLayout1 = new BorderLayout();
JLabel label = new JLabel();
public MyTreeCellRenderer() {
this.setLayout(null);
this.add(check);
this.add(label); 《-------------------------------------------------------------------这里
check.setBackground(UIManager.getColor("Tree.textBackground"));
label.setBackground(UIManager.getColor("Tree.textBackground"));
this.setBackground(UIManager.getColor("Tree.textBackground"));
}
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
String stringValue = tree.convertValueToText(value, sel, expanded, leaf,
row, hasFocus);
setEnabled(tree.isEnabled());
label.setFont(tree.getFont());
check.setSelected(((FileNode) value).isSelected());
//设置图标为系统的文件类型图标
FileSystemView fileSystemView = FileSystemView.getFileSystemView();
label.setIcon(fileSystemView.getSystemIcon(((FileNode) value).getFile())); 《-------------这里
label.setText(stringValue); 《--------------------------------------------------------------------------这里
return this;
}
虽然不是你想要的JComboBox里面添加图片 但是方法已经很明显了
查一下它的API 发现这个方法
void |
setRenderer(ListCellRenderer aRenderer)
设置渲染器,该渲染器用于绘制列表项和从 JComboBox 字段的列表中选择的项。 |
再查找 接口 ListCellRenderer
实现下这个方法就可以了 具体实现可以参照上面那两个代码例子 应该可以实现
Component |
getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
返回已配置用于显示指定值的组件。 |