首页 > 解决方案 > 如何从对象列表中将项目添加到 JComboBox

问题描述

我目前正在尝试创建一个JComboBox向我显示不同汽车组件名称的名称。该类Component当前具有以下变量:

public class Component{
     private int id;
     private String name;
     private double price;
     private int quantity; 
     private String type;

}

现在我有另一个类,其中包含所有存在的组件,它们已从我的数据库中加载:

public class Stand{
     private List<Component> allComponents;

     public Stand(){
     //loads the components from my database into allComponents
     this.allComponents = componentDAO.loadComponents();


     public List<Componente> getAllComponents(){
        return this.allComponents;
     }
}

我现在正在寻找的是创建一个名为的类SelectComponent,其中一些JComboBox仅向我显示每个Component选项的名称。我该怎么做?

此外,在选择所需的组件后Component,我将在同一个类中使用另一个List<Component>来保留选定的组件,因为我需要在同一个窗口中拥有多个 JComboBox。选择后如何将所选内容添加Component到此List

如果您可以将 JComboBox 设置为已经显示特定类型的组件,例如“Paint”,那会更好,因为我也需要帮助。如果我需要提供更多信息,请告诉我。我在跟踪所需的一切方面有些困难,因为已经完成了很多工作。只是想得到一个想法并将其应用于我的程序。

标签: javaswing

解决方案


仅显示每个组件的名称作为选项。

创建自定义渲染器以显示“名称”属性。

基本渲染器的代码类似于:

class CarComponentRenderer extends BasicComboBoxRenderer
{
    public Component getListCellRendererComponent(
        JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
    {
        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

        if (value instanceof CarComponent)
        {
            CarComponent carComponent = (CarComponent)value;
            setText( carComponent.getName() );
        }

        return this;
    }
}

然后,您可以使用以下方法在组合框上设置渲染器:

comboBox.setRenderer( new CarComponentRenderer() );

查看带有自定义渲染器的组合框以获取更多信息和更完整的解决方案。


推荐阅读