0

如果我在 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

        }
    });

非常不愉快的问题。我仅在单击组合框(弹出窗口)时才使用组合框,因此我仅在此时添加其项目,然后将其删除。尽管如此,第一个/标题项目永远不会更新或者它只是空白,我无法使用字段保存最后一个选择状态,现在我也无法通过 ArrayList 的帮助来完成。我尝试了鼠标和项目侦听器,但每次都失败了,因为它总是返回第一个元素。

您是否知道如何跟踪所选内容,即使仅在弹出窗口中处理它?我非常感谢你!

4

2 回答 2

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

        }
    });
于 2013-05-05T21:04:30.043 回答
0

您需要对 SelectionEvents 做出反应,而不仅仅是对 Popup 事件。在您的代码中, selectionsaver.add() 方法仅在每次弹出窗口可见之前调用。

于 2013-05-05T19:58:59.707 回答