将JComboBox的初始选定索引设置为-1或无

时间:2017-02-09 06:41:13

标签: java swing jcombobox listcellrenderer

我最近开始为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

喜欢这样。

这是我在发布表单时所得到的内容。

enter image description here

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),仍然没有工作。

有任何建议或解决方案吗?

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;
}

当值不是您准备呈现的值之一时,这将显示---