将对象的属性添加到组合框? [英] add a property of object to combo box?

查看:83
本文介绍了将对象的属性添加到组合框?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有对象列表(Artikel.java),并将它们添加到JComboBox. 我希望该对象的属性(字符串名称)在列表中吗?我做了如下,但直到该对象在列表中,它是不可读的.

I have list of objects(Artikel.java) and i add them to JComboBox. I want a property(String name) of this object be in the list? i did as below but stil the object is in the list and it is not readable.

我该怎么做?我的问题在哪里?

if (titel.equalsIgnoreCase("artikel")) {
            panel.lstArtikel = readFromArtikel();
            panel.cbxArtikel = new WebComboBox(new ComboBoxModelArtikel(panel, lstArtikel));
            panel.cbxArtikel.setAction(new ComboBoxArtikelActionListener(panel));
            panel.cbxArtikel.setRenderer(new ArtikelListRenderer());
            panel.artikelTabPanel.add(panel.cbxArtikel,   BorderLayout.NORTH);

}

ComboBoxModelArtikel

public class ComboBoxModelArtikel implements ComboBoxModel{
ConfigToolScannersPanel panel;   List<Artikel> lstArtikels; 
private Object selectedItem;

public ComboBoxModelArtikel(ConfigToolScannersPanel panel, List<Artikel> artikels) {
     this.panel=panel;  this.lstArtikels=artikels;      
      }
public void setSelectedItem(Object anItem) {
    selectedItem=anItem;
      }
public Object getSelectedItem() {
    return selectedItem;
      }
public int getSize() {
    return lstArtikels.size();
      }
public Object getElementAt(int index) {
    return (Artikel)lstArtikels.get(index);
      }
public void addListDataListener(ListDataListener l) {
    //Todo:
      }
public void removeListDataListener(ListDataListener l) {
    //Todo:
      }
    }

ArtikelListRenderer()

class ArtikelListRenderer extends JLabel implements ListCellRenderer {
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
    if (value != null) {
        Artikel artikels = (Artikel) value;
        setText(artikels.getName());
    } else{
        setText("Please select an item");
    }

    return this;
    }
 }

推荐答案

我在一个类中重新创建了该问题,它似乎正在起作用:

I recreated the problem in one class, and it seems to be working:

package test;

import java.awt.Component;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.List;

import javax.swing.ComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.event.ListDataListener;

public class ComboMain {

    public static void main(String[] args) {
        JFrame f = new JFrame();
        JComboBox<Artikel> cmb = new JComboBox<Artikel>(
                new ComboBoxModelArtikel(null, readFromArtikel()));
        cmb.setRenderer(new ArtikelListRenderer());
        f.add(cmb);
        f.setSize(new Dimension(200, 200));
        f.setVisible(true);
    }

    public static List<Artikel> readFromArtikel() {
        List<Artikel> a = new ArrayList<Artikel>();
        a.add(new Artikel("id", "name"));
        a.add(new Artikel("id1", "name1"));
        return a;
    }

}

class Artikel {
    String id;
    String name;

    public Artikel(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

}


class ArtikelListRenderer extends JLabel implements ListCellRenderer<Artikel> {

    @Override
    public Component getListCellRendererComponent(
            JList<? extends Artikel> list, Artikel value, int index,
            boolean isSelected, boolean cellHasFocus) {
        if (value != null) {
            Artikel artikels = (Artikel) value;
            setText(artikels.getName());
        } else {
            setText("Please select an item");
        }

        return this;
    }
}

class ComboBoxModelArtikel implements ComboBoxModel<Artikel> {
    private Object selectedItem;
    List<Artikel> lstArtikels;
    private Object panel;

    public ComboBoxModelArtikel(Object panel, List<Artikel> artikels) {
        this.panel = panel;
        this.lstArtikels = artikels;
    }

    public void setSelectedItem(Object anItem) {
        selectedItem = anItem;
    }

    public Object getSelectedItem() {
        return selectedItem;
    }

    public int getSize() {
        return lstArtikels.size();
    }

    public Artikel getElementAt(int index) {
        return lstArtikels.get(index);
    }

    public void addListDataListener(ListDataListener l) {
        // Todo:
    }

    public void removeListDataListener(ListDataListener l) {
        // Todo:
    }
}

问题可能出在WebComboBox中

Maybe the problem is in the WebComboBox

这篇关于将对象的属性添加到组合框?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆