首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >listCellRenderer中的java jcombobox

listCellRenderer中的java jcombobox
EN

Stack Overflow用户
提问于 2012-11-13 16:34:10
回答 2查看 1.3K关注 0票数 0

我想创建一个列表,其中包含带有数据和jCombobox的项。我使用这个listCellRenderer:

代码语言:javascript
复制
public class DeliveryListCellRenderer extends JPanel implements ListCellRenderer{

     JLabel[] lbl = new JLabel[2];  
     JComboBox combo;

  public DeliveryListCellRenderer()  
  {  
    setLayout(new GridLayout(0,2,15,0));  
    lbl[0] = new JLabel("",JLabel.RIGHT);  
    add(lbl[0]);  
    lbl[1] = new JLabel("",JLabel.LEFT);  
    add(lbl[1]);
    String[] timeZones = {"timeZone 1", "timeZone 2", "timeZone 3", "timeZone 4"};

    combo = new JComboBox(timeZones); 
    combo.setSelectedIndex(1);

    add(combo);
  }  
  public Component getListCellRendererComponent(JList list,Object value,  
                      int index,boolean isSelected,boolean cellHasFocus)  
  {  
    Delivery delivery = (Delivery)value;  
    lbl[0].setText("X : "+delivery.getNode().getX());  
    lbl[1].setText("Y : "+delivery.getNode().getY());
    if(isSelected) setBackground(Color.CYAN);  
    else setBackground(Color.WHITE);  
    return this;  
  }  
}

当我运行应用程序时,看起来一切正常,但当我单击组合框时没有任何反应。

有谁有主意吗?提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2012-11-13 16:56:44

当我运行应用程序时,一切正常,但当我单击组合框时没有任何反应。

票数 3
EN

Stack Overflow用户

发布于 2012-11-13 20:26:03

您需要将要在ComboBox中显示的内容与您的对象进行映射。

我的建议如下:(不是你的对象的类型)。

代码语言:javascript
复制
    public class CustomComboBoxRenderer extends JLabel implements ListCellRenderer<T> {

    @Override
    public Component getListCellRendererComponent(JList<? extends T> list, T value, int index, boolean isSelected, boolean cellHasFocus) {

    if (isSelected) {
        setBackground(list.getSelectionBackground());
        setForeground(list.getSelectionForeground());
    }
    else {
        setBackground(list.getBackground());
        setForeground(list.getForeground());
    }
    if (index == -1) {
        setOpaque(false);
        setForeground(list.getForeground());
    }
    else {
        setOpaque(true);
    }
    setFont(list.getFont());

    if (value != null) {
        setText(value.getName());
    }

    return this;
    }
}

ComboBox创建:

代码语言:javascript
复制
    JComboBox<T> comboBox = new JComboBox<T>();
    comboBox.setRenderer(new CustomComboBoxRenderer ());
    add(comboBox);

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13357603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档