在使用JComboBox
Swing 并阅读所有接口和类及其各种属性时,我不会混淆ComboBoxEditor
'sgetItem
方法和JComboBox
's getSelectedItem
.
我是从可编辑组合框的角度说的。当我在组合框中编辑一些文本并按 Enter 后调用这两种方法时,两种方法都返回相同的值。当然,这是意料之中的,但是这两种方法的具体用途是什么?从组合框的代码中调用它们的顺序有什么不同吗?
ComboBoxEditor 的getItem()
函数返回被编辑的项目而 JComboBoxgetSelectedItem()
返回被选中的项目。但是要具体到您的问题:
从组合框的代码中调用它们的顺序有什么不同吗?
可编辑的组合框使用编辑器来显示选定的项目。一旦项目被编辑,一个动作事件就会ComboBoxEditor
在JComboBox
. 编辑器的动作监听器实现的功能,从以下源代码actionPerformed
中获取编辑然后设置为使用的功能:item
editor
selected
model
setSelectedItem(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
.
为什么要使用 ComboBoxEditor 的 getItem() 方法?获取编辑器以获取其价值是额外的工作。
一般来说,您应该只从组件模型中获取数据。模型负责跟踪模型中的数据以及模型中的选中项。组合框的 getSelectedItem() 方法是从模型中获取所选项目的便捷方法。
数据更改时更新模型是编辑的责任。所以我会说编辑器使用 getItem() 方法在适当的时候更新模型,你不应该真正使用它。