在使用Swing中的JComboBox
并阅读所有接口和类及其各种属性时,我不会在ComboBoxEditor
的{{1}}方法和{getItem
方法之间混淆{1}} JComboBox
。
我是从一个可编辑的组合框的角度来谈论的。在编辑组合框中的某些文本并按Enter后调用这两种方法时,两种方法都返回相同的值。当然,这是预期的,但那么这两种方法的具体用途是什么?在组合框的代码中调用它们的顺序有什么不同吗?
答案 0 :(得分:3)
ComboBoxEditor的getItem()
函数返回已修改项
JComboBox getSelectedItem()
返回所选项目。但是要特定于您的问题:
调用它们的顺序是否有任何不同 在组合框的代码中?
可编辑的组合框使用编辑器显示所选项目。编辑项目后,会立即对ComboBoxEditor
的已注册JComboBox
实例触发操作事件。编辑器的动作侦听器的已实现actionPerformed
功能从item
获取已编辑的editor
,然后使用selected
的{{1}}设置为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()
返回所选项目。
答案 1 :(得分:2)
为什么要使用ComboBoxEditor的getItem()方法?获取编辑器以获得其价值是额外的工作。
通常,您应该只从组件模型中获取数据。该模型负责跟踪模型中的数据以及模型中的选定项目。组合框的getSelectedItem()方法是从模型中获取所选项目的便捷方法。
编辑负责在数据更改时更新模型。所以我想说编辑器使用getItem()方法在适当的时候更新模型,你不应该真正使用它。