如何在JComboBox中打开菜单?

时间:2015-05-11 15:47:07

标签: java swing jcombobox

我已经创建了一个自定义的JComboBox,所以如果我尝试打开我的comboBox,我可以看到描述附近的复选按钮。还行吧。但是,如果我想选择n项,我必须打开选择列表,然后检查一个项目,重新打开选择列表,选择其他项目,打开选择列表等... 我想打开选择列表一次然后选择我想要的列表而不是关闭选择列表。这样做有可能吗?

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

这是使用复选按钮

创建comboBox的代码
   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());

2 个答案:

答案 0 :(得分:1)

可能您可以尝试添加一个监听器,如下所示,当选择一个项目时,您可以使用invokeLater并保持弹出窗口打开。它可能不是确切的解决方案,但会给你一个想法。让我知道它是否适合你?

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

答案 1 :(得分:0)

在您的组合中添加ItemListener并覆盖itemStateChanged以致电showPopup()(但不要在事件调度线程上调用它,请使用SwingUtilities.InvokeLater())。