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