如何让 JComboBox 中的菜单保持打开状态?

How can I hold the menu open in the JComboBox?

我已经创建了一个自定义 JComboBox,因此如果我尝试打开我的组合框,我可以在描述附近看到复选按钮。还行吧。但是如果我想 select n 项我必须,打开 select 列表,然后检查一个项目,重新打开 select 列表, select 另一个项目,打开select 列表等... 我想打开 select 列表一次,然后 select 我想要的列表而不是关闭 select 列表。可以吗?

这是 CheckComboStore

public class CheckComboStore
{
    String id;
    Boolean state;
    String nomeArticolo;

    public CheckComboStore(String id, String nomeArticolo,Boolean state)
    {
        this.id = id;
        this.nomeArticolo=nomeArticolo;
        this.state = state;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Boolean getState() {
        return state;
    }

    public void setState(Boolean state) {
        this.state = state;
    }

    public String getNomeArticolo() {
        return nomeArticolo;
    }

    public void setNomeArticolo(String nomeArticolo) {
        this.nomeArticolo = nomeArticolo;
    }        
}

这是创建带有复选按钮的组合框的代码

   List<Articoli> listaArticoli = modelManager.getArticoliManager().estraiArticoli(false,false,false,false,false);
        CheckComboStore[] stores = new CheckComboStore[listaArticoli.size()];
        int i=0;
        for(Iterator<Articoli>it=listaArticoli.iterator(); it.hasNext();){
            Articoli art = it.next();
            stores[i] = new CheckComboStore(art.getCodArticoloString(),art.getNomeArticolo(),false);
            i++;
        }
    comboBoxArticoli = new ComboFormat(stores);
    comboBoxArticoli.setRenderer(new CheckComboRenderer());

May be you can try adding a listener as shown below and when an item is selected you can use invokeLater and keep the popup open.它可能不是确切的解决方案,但会给你一个想法。让我知道它是否适合你?

combo.addItemListener(new ItemListener() {

      @Override
      public void itemStateChanged(ItemEvent e) {
        if (e.getStateChange() == ItemEvent.SELECTED) {
          if (e.getItem() == combo.getItemAt(0)) //some condition {

            SwingUtilities.invokeLater(new Runnable() {

              @Override
              public void run() {
                combo.setSelectedItem(lastSelectedItem);
                combo.showPopup();
              }
            });
          } else {
            lastSelectedItem = combo.getSelectedItem();
          }
        }
      }
    });

添加一个ItemListener to your combo and override itemStateChanged to call showPopup() (but don't call it on the Event Dispatch Thread, use SwingUtilities.InvokeLater()).