如何在不修改编辑器的情况下在JComboBox上使用addItem()?

时间:2012-03-06 16:28:43

标签: java swing jcombobox

我正在尝试使用可编辑的JComboBox,这样当用户在编辑器中输入时,可能的结果会显示在组合框的列表部分中。

不幸的是,我发现在使用addItem(item)getModel().addItem(item)时,用户输入的输入会被我添加的第一个值覆盖。我考虑过存储编辑器值,添加项目,然后使用setSelectedItem()来解决这个问题,但是我不想保留任何选定文本/插入位置的状态,并且相信这应该是更微不足道的事情,但不能为我的生活搞清楚。

JComboBox box = new JComboBox();
box.setModel(new MutableComboBoxModel());
box.setEditable(true);
box.getEditor().getEditorComponent().addKeyListener(new KeyListener() {
  public void keyPressed(KeyEvent e) {

  }

  public void keyReleased(KeyEvent e) {
  }

  public void keyTyped(KeyEvent e) {
    // Actual results are retrieved from server via HTTP
    box.addItem("Demo");
    // Here, the editor window the user was typing in is replaced with the value "Demo".. how to fix this?
  }
});

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

您需要实现自己的MutableComboBoxModel,因为DefaultComboBoxModel负责“添加项目然后自动选择它”行为。