我已经创建了一个自定义的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());
答案 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()
)。