-1

我想让功能更新当前项目JComboBox

@Override
public void updateId(String id) {
    boolean old = notify;
    notify = false;
    comboBox.setEditable(true);
    comboBox.setSelectedItem(id);
    comboBox.setEditable(false);
    notify = old;
}

结果是这样的:

图片

  1. ComboBox 绑定到文本框,
  2. 我更改了文本框值,它正在调用 updateId(),
  3. 扩展组合框,
  4. 选择已更改的项目,

组合的下拉列表不反映对所选项目所做的更改;在给定的示例中,下拉列表底部应该有“xxx”。

4

1 回答 1

1

我误解了JComboBox.setSelectedItem()

当组合框可编辑时,听起来它应该覆盖位于模型的选定索引下的项目,但它只是覆盖显示的值并且不触及模型。

这个做的工作:

    @Override
    public void updateId(String id) {
        boolean old = notify;
        notify = false;
        comboBox.setEditable(true);

        DefaultComboBoxModel<String> model = (DefaultComboBoxModel<String>) comboBox.getModel();
        int selectedIndex = comboBox.getSelectedIndex();
        model.removeElementAt(selectedIndex);
        model.insertElementAt(id, selectedIndex);
        comboBox.setSelectedIndex(selectedIndex);

        comboBox.setEditable(false);
        notify = old;
    }
于 2012-07-05T23:43:11.040 回答