我最近开始为ListCellRenderer
学习JComboBox
,最后得到了基本想法。但是,我无法将组合框的初始状态或初始选定项设置为null
(或选定的索引为-1)。我想将其设置为-1,以便在加载表单时,在用户单击下拉列表以选择项目之前,尚未选择任何内容。
我尝试使用comboBox.setSelectedIndex(-1)
和comboBox.setSelectedItem(null)
GradeLevelDaoImpl gldi = new GradeLevelDaoImpl();
DefaultComboBoxModel gradeLevelModel = new DefaultComboBoxModel(gldi.getAllActiveGradeLevels().toArray());
jcmbGradeLevel.setModel(gradeLevelModel);
jcmbGradeLevel.setRenderer(new JComboBoxRenderer());
jcmbGradeLevel.setSelectedItem(null); //doesn't work
jcmbGradeLevel.setSelectedIndex(-1); //doesn't work
喜欢这样。
这是我在发布表单时所得到的内容。
GradeLevel
组合框仍处于选中状态。索引为0;
这是我的渲染器。
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
//Class value conversion to getString value using getter
if (value instanceof SchoolYear) {
this.setText("" + ((SchoolYear) value).getStart());
}
if (value instanceof GradeLevel) {
this.setText("" + ((GradeLevel) value).getGradelevel());
}
if (value instanceof PaymentTerm) {
this.setText("" + ((PaymentTerm) value).getPaymentTerm());
}
if (value instanceof FeeCategory) {
this.setText("" + ((FeeCategory) value).getFeeCategory());
}
//selection formatting
if (isSelected) {
this.setBackground(Color.YELLOW);
//this.setBackground(list.getSelectionBackground());
this.setForeground(list.getSelectionForeground());
} else {
this.setBackground(list.getBackground());
this.setForeground(list.getForeground());
}
if ((isSelected) && (cellHasFocus)) {
this.setBorder(new LineBorder(Color.black));
} else {
this.setBorder(null);
}
return this;
}
我甚至尝试将index
参数设置为-1。 index = -1;
没有成功。
尝试list.setSelectedIndex(-1)
,仍然没有工作。
有任何建议或解决方案吗?
答案 0 :(得分:1)
您没有为渲染器设置“默认”值(或者至少您没有检查value
是否为null
)。
请记住,这与组件中的所有元素共享,因此您必须配置可能在不同对象值之间更改的所有属性
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
//Class value conversion to getString value using getter
if (value instanceof SchoolYear) {
this.setText("" + ((SchoolYear) value).getStart());
} else if (value instanceof GradeLevel) {
this.setText("" + ((GradeLevel) value).getGradelevel());
} else if (value instanceof PaymentTerm) {
this.setText("" + ((PaymentTerm) value).getPaymentTerm());
} else if (value instanceof FeeCategory) {
this.setText("" + ((FeeCategory) value).getFeeCategory());
} else {
this.setText("---");
}
//selection formatting
if (isSelected) {
this.setBackground(Color.YELLOW);
//this.setBackground(list.getSelectionBackground());
this.setForeground(list.getSelectionForeground());
} else {
this.setBackground(list.getBackground());
this.setForeground(list.getForeground());
}
if ((isSelected) && (cellHasFocus)) {
this.setBorder(new LineBorder(Color.black));
} else {
this.setBorder(null);
}
return this;
}
当值不是您准备呈现的值之一时,这将显示---