从对象获取值并添加到jcombobox中

时间:2015-07-10 16:27:26

标签: java swing object jcombobox

对你来说,美好的一天 我有jcombobox从数据库逐个填充它,它可以正常使用此代码:

final JComboBox pruCompanyCB = new JComboBox(DAOFactory.getInstance()
                            .getPruComanyDAOImpl().findAll().toArray());
pruCompanyCB.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        JComboBox comboBox = (JComboBox) arg0.getSource();
        PruCompany pruCompany = (PruCompany) comboBox.getSelectedItem();
        CRSevice.getInstance().getPruCompanySrv().setPruCompany(pruCompany);

并使用下一个代码来选择

car.setPruCompany((PruCompany) pruCompanyCB.getSelectedItem());

但是在gui中,组合框中的项目看起来像

PruCompany {id = 1,country = Country {id = 4,name =“USA”}}

喜欢对象toString()格式

来自pruCompany对象的getName()如何在combobox中显示名称而不更改模型类中的toString()方法 任何方式请  最好的问候和祝愿

2 个答案:

答案 0 :(得分:1)

您的问题来自JComboBox使用toString()方法的事实 其成员创建GUI文本输出。

所以你必须覆盖PruCompany类中的toString()方法 想快速改变这种行为。

如果你有更多的时间或toString()方法 PruCompany非常重要,你可以实现一个帮助类 并覆盖其toString()方法。

此ComboItem的label属性将显示在GUI上, 但您必须使用ComboItem对象数组创建JComboBox 实现这种效果。

有关详细信息,请查看there

public class ComboItem {
    private String value;
    private String label;

    public ComboItem(String value, String label) {
        this.value = value;
        this.label = label;
    }

    public String getValue() {
        return this.value;
    }

    public String getLabel() {
        return this.label;
    }

    @Override
    public String toString() {
        return label;
    }
}

答案 1 :(得分:1)

另一种方法是创建一个自定义渲染器,以显示添加到ComboBoxModel的Object中的特定属性。

Combo Box With Custom Render给出了如何创建自定义渲染器的示例。

创建自定义渲染器时,大多数人忘记实现自定义KeySelectionManager,因此也可以使用键盘而不仅仅是鼠标来选择项目。上述链接中使用的渲染器也支持此功能。