如果我在ComboBox中有三个项目:
123,456和789,只能得到第一个(123),忽略所有其余的。
mainCombo.addPopupMenuListener(new PopupMenuListener() {
ArrayList<Object> selectionSaver = new ArrayList<Object>();
@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent arg0) {
if (mainList.getSelectedValue() != null) {
ArrayList<Object> arrayValue = mainMethods.returnArrayList(mainList.getSelectedValue());
for (int i = 0; i < arrayValue.size(); i++) {
mainCombo.addItem(arrayValue.get(i));
}
Object lastSelected = mainCombo.getSelectedItem(); // It gets the bloody first and never the other ones, even when I select them.
selectionSaver.add(lastSelected); // It adds the bloody first that was captured.
System.out.println(selectionSaver); // Prints only the first, because it was selected by default.
}
}
@Override
public void popupMenuWillBecomeInvisible(PopupMenuEvent arg0) {
mainCombo.removeAllItems();
}
@Override
public void popupMenuCanceled(PopupMenuEvent arg0) {
// TODO Auto-generated method stub
}
});
非常不愉快的问题。我只在点击它(Popup)时才使用组合框,因此我只是在这一刻添加它的项目,然后我将它们删除。然而,第一个/标题项永远不会更新或它只是空白,我无法用字段保存最后一个选择状态,现在我也无法通过ArrayList来帮助它。我尝试过鼠标和项目监听器,每次都失败了,因为它总是返回第一个元素。
你是否知道如何跟踪所选内容,即使只是在弹出内部处理它?我非常感谢你!
答案 0 :(得分:1)
精彩的mKorbel!我删除了弹出式监听器并转到JList,我终于得到了它的工作;现在它工作得很好,组合框根据JList进行了精美的更新,并且第一个项目可以灵活地使用组合框项目选择进行更新。
出于学习目的,这是代码:
mainList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent arg0) {
int selected[] = mainList.getSelectedIndices();
for (int i = 0; i < selected.length; i++) {
String element = mainList.getModel().getElementAt(selected[i]);
textItem.setText(element);
}
if (arg0.getValueIsAdjusting() == true) {
if (mainList.getSelectedValue() != null) {
ArrayList<Object> arrayValue = mainMethods.returnArrayList(mainList.getSelectedValue());
mainCombo.removeAllItems();
for (int i = 0; i < arrayValue.size(); i++) {
mainCombo.addItem(arrayValue.get(i));
}
}
}
}
});
答案 1 :(得分:0)
您需要对SelectionEvents做出反应,而不仅仅是对Popup事件做出反应。 在您的代码中,selectionsaver.add()方法仅在弹出窗口可见之前每次调用。