0

在使用JComboBoxSwing 并阅读所有接口和类及其各种属性时,我不会混淆ComboBoxEditor'sgetItem方法和JComboBox's getSelectedItem.

我是从可编辑组合框的角度说的。当我在组合框中编辑一些文本并按 Enter 后调用这两种方法时,两种方法都返回相同的值。当然,这是意料之中的,但是这两种方法的具体用途是什么?从组合框的代码中调用它们的顺序有什么不同吗?

4

2 回答 2

3

ComboBoxEditor 的getItem()函数返回被编辑的项目而 JComboBoxgetSelectedItem()返回被选中的项目。但是要具体到您的问题:

从组合框的代码中调用它们的顺序有什么不同吗?

可编辑的组合框使用编辑器来显示选定的项目。一旦项目被编辑,一个动作事件就会ComboBoxEditorJComboBox. 编辑器的动作监听器实现的功能,从以下源代码actionPerformed中获取编辑然后设置为使用的功能:itemeditorselectedmodelsetSelectedItem(item)

public void actionPerformed(ActionEvent e) {
        Object newItem = getEditor().getItem(); // get edited's item
        setPopupVisible(false);
        getModel().setSelectedItem(newItem);   // model set the item as selected
        String oldCommand = getActionCommand();
        setActionCommand("comboBoxEdited");
        fireActionEvent();
        setActionCommand(oldCommand);
    } 

然后,当我们要求获取getSelectedItem()它时,通过询问model.

于 2013-10-19T15:07:00.897 回答
2

为什么要使用 ComboBoxEditor 的 getItem() 方法?获取编辑器以获取其价值是额外的工作。

一般来说,您应该只从组件模型中获取数据。模型负责跟踪模型中的数据以及模型中的选中项。组合框的 getSelectedItem() 方法是从模型中获取所选项目的便捷方法。

数据更改时更新模型是编辑的责任。所以我会说编辑器使用 getItem() 方法在适当的时候更新模型,你不应该真正使用它。

于 2013-10-19T14:58:56.923 回答