Java Swing List获取参数对象类型

时间:2018-10-20 20:00:25

标签: java list swing jcombobox

我只是从Java编码开始,实际上是尝试在swing中创建简单的应用程序-具有两个comboBox字段,其中包含多个列(每个组合都有其他List)。

我研究关于stackoverflow的解决方案,并在下面创建代码。它有效,但仅适用于一种类型的列表。我想创建更多通用代码,以在一个Class中处理多个List类型。 我可以获取List的类型并在一个Class中处理两个不同的ComboBox List,还是必须搜索其他选项来做到这一点。 我非常感谢给我建议或给出更好的解决方案(也许我做错了,这是更好的解决方案)。

我的代码:

import java.awt.Component;
import java.util.List;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;

public class MyComboBox extends JComboBox {

    static final long serialVersionUID = 1L;

    public MyComboBox(List<?> list) {
        super(list.toArray());

        if (!list.isEmpty()) {
            this.setRenderer(new ComboCustomRender());

        }

    }

    private class ComboCustomRender extends DefaultListCellRenderer {

        static final long serialVersionUID = 1L;

        @Override
        public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected,
                boolean cellHasFocus) {
            JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
            Foo foo = (Foo) value;
            label.setText(foo.getField1() + foo.getField2);
            return label;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

好的,我理解了我的错误并找到了解决方案。 我不需要扩展JComboBox的类,而只需要具有实现getListCellRendererComponent()的类,在这里我可以编写类来处理每种类型的List。 第二种解决方案是在列表中使用的每个类中重写方法toString(),然后无需强制转换对象-奥尔尼返回方法toString()。