永发信息网

如何把JLabel添加到JComboBox里

答案:2  悬赏:20  手机版
解决时间 2021-07-31 04:59

就像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数组来做还是不行.也是那样显示.

告诉我怎么做.是却什么?或者用其他方法做?

最佳答案
box.setRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList list,
Object value, int index, boolean isSelected,
boolean cellHasFocus) {
Component r = super.getListCellRendererComponent(list, value,
index, isSelected, cellHasFocus);
setIcon(new ImageIcon("此处换成你的图标文件路径"));
return r;

}
});
全部回答

你好

刚查了一下 希望能够帮到你

摘自: 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) 返回已配置用于显示指定值的组件。

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
怎么样才能够对一切的负面影响一笑而过呢?
热带气候最低气温多少度?温带气候最低气温多
急求关于“预防疾病,讲卫生”手抄报题材
初三物理题、高手来~~
济源市济源出众拌捞麻辣烫在什么地方啊,我要
QQ幻想和自由幻想一样不?
35级蓝色的重甲5件一共多少钱
窗口显示问题
天下2周末任务是什么?
大学无机化学该怎么学?
现在什么游戏画面最华丽,要不花钱的?
歇斯底里那是怎样的状态?
设{an}为等差数列,Sn为数列{an}的前n项和,已
山城区鹤壁慈孝堂(山城店)这个地址在什么地方
天龙八部墨镜猫宝宝可以爆技能吗
推荐资讯
吉利区中国移动(洛阳吉利文化北路营业厅)地址
道里区哈尔滨中国银行(锦江支行)地址有谁知道
抢车位几点去开通最好
证明光路可逆 实验方案
湖滨区三门峡小画家美术培训哪位知道具体地址
西北工大和南航哪个好
一米六打篮球比赛可以不?同意的顶…
谁能给我个能看PP的网站?
QQ 密码申诉一般多长时间把验证码发到邮箱?
男友天天让哥们陪我聊天天天这样的半年多了,
21世经什么行业最有发展前途?
怎么使得自己开心呀?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?