jcombobox中加图标的一个问题……
我想像qq登录那样在JCombobox前面显示图标。我实现了,但是当我把JImagedComboBox对象设置成可编辑时,图标就加不进去了,怎么样才能像qq那样呢?代码如...
我想像qq登录那样在JCombobox前面显示图标。我实现了,但是当我把JImagedComboBox 对象设置成可编辑时,图标就加不进去了,怎么样才能像qq那样呢?代码如下。package com.cn.swing;import java.awt.*;import java.util.Vector;import javax.swing.*; public class JImagedComboBox extends JComboBox { public JImagedComboBox(DefaultComboBoxModel moedl) { super(moedl); ListCellRenderer renderer = new DefaultListCellRenderer() { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); this.setIcon(new ImageIcon("lib/cu.gif")); return this; } }; this.setRenderer(renderer); } public static void main(String[] args) { JFrame frame = new JFrame(); frame.setSize(400, 400); Vector vector=new Vector(); vector.add(1); vector.add(2); DefaultComboBoxModel model=new DefaultComboBoxModel(vector); JImagedComboBox comboBox = new JImagedComboBox(model); //comboBox.setEditable(true);//问题所处!!!!! frame.getContentPane().add(comboBox, BorderLayout.NORTH); frame.show(); }}class ImagedComboBoxItem { private Icon icon = null; ImagedComboBoxItem(Icon icon) { this.icon = icon; } public Icon getIcon() { return icon; } }
展开
1个回答
展开全部
看源码的注释就知道原因了
JComboBox中setEditor方法:
* Sets the editor used to paint and edit the selected item in the
* <code>JComboBox</code> field. The editor is used only if the
* receiving <code>JComboBox</code> is editable. If not editable,
* the combo box uses the renderer to paint the selected item.
当设为可编辑时,根本没用到你重写的渲染器。如果想要实现你所说的功能,我觉得应该重写JComboBox的setEditor(ComboBoxEditor)方法,并且定制一个新的ComboBoxEditor。这个组件默认使用JTextField来渲染的(而你写的渲染器是默认使用JLabel),所以可能还要定制自己的继承自JTextField类,总之会相当麻烦。不知道你能不能找到更好的办法。。。
JComboBox中setEditor方法:
* Sets the editor used to paint and edit the selected item in the
* <code>JComboBox</code> field. The editor is used only if the
* receiving <code>JComboBox</code> is editable. If not editable,
* the combo box uses the renderer to paint the selected item.
当设为可编辑时,根本没用到你重写的渲染器。如果想要实现你所说的功能,我觉得应该重写JComboBox的setEditor(ComboBoxEditor)方法,并且定制一个新的ComboBoxEditor。这个组件默认使用JTextField来渲染的(而你写的渲染器是默认使用JLabel),所以可能还要定制自己的继承自JTextField类,总之会相当麻烦。不知道你能不能找到更好的办法。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询