具有动态条目的可编辑JComboBox

时间:2014-09-08 16:01:35

标签: java swing jcombobox

我使用:

编辑了我的JComboBox
myCombo.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE);

我遇到以下任务的多重问题:

当写入组合框时,应该采用框的新内容并与列表进行比较,所有以此文本开头的条目都应显示在弹出菜单中。

所以,如果我有一个列表:" Aban" "阿文" "阿伯" " ACEN" "亚丁" 并输入" Ab"进入框中,然后弹出窗口应显示前3个条目。

单击其中一个条目时(通过键盘选择并按Enter / tab或单击鼠标)ComboBox应获取该值,弹出窗口应隐藏。我需要找到这个动作,因为一些元素在末尾有一个注释(在我需要的支持中),但只有在选择了其中一个条目时

以下是我的代码中最重要的部分:

final JTextComponent tcA = (JTextComponent) myCombo.getEditor().getEditorComponent();
tcA.getDocument().addDocumentListener(new DocumentListener() {
  public void methodUsedByinsertUpdateAndremoveUpdate(DocumentEvent e) {
    String item = ((JTextComponent) myCombo.getEditor().getEditorComponent()).getText();

    //Routine to get the new list in a vector, not pasted for readability

    DefaultComboBoxModel newMyComboModel = new DefaultComboBoxModel(myVectorList);
    myCombo.setModel(newMyComboModel);
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        myCombo.showPopup();
      }
    });
  }
}
myCombo.addActionListener(new ActionListener() {
  @Override
  public void actionPerformed(ActionEvent e) {
  if(myCombo.getModel().getSize() == 1) {

    //Special logic to find out if the selected item has a note

    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        myCombo.hidePopup();
      }
    });
  }
}

有了这个,我有:

  1. 第一个字符出现问题(插入位置无法正常工作)
  2. 在字段中输入新字符时,弹出窗口不会自动显示和隐藏
  3. 未实现Swing GUI的问题
  4. 如果您需要更多信息,请询问

1 个答案:

答案 0 :(得分:0)

peeskillet推荐的Glazed List完全符合我的要求