Author: kmorin Date: 2013-03-12 19:23:22 +0100 (Tue, 12 Mar 2013) New Revision: 2620 Url: http://nuiton.org/projects/jaxx/repository/revisions/2620 Log: fixes #2589 BeanFilterableComboBox - the text is not reset when th selected item is set to null by binding Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanFilterableComboBoxHandler.java Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanFilterableComboBoxHandler.java =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanFilterableComboBoxHandler.java 2013-03-12 16:47:34 UTC (rev 2619) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanFilterableComboBoxHandler.java 2013-03-12 18:23:22 UTC (rev 2620) @@ -205,7 +205,7 @@ selectedItemString = JAXXUtil.getStringValue(selectedItem); } if (selectedItem == null || !selectedItemString.equals(text)) { - ui.setSelectedItem(null); + unselectItem(); } } @@ -223,11 +223,14 @@ if (log.isDebugEnabled()) { log.debug("itemStateChanged selected " + item + " - " + (item != null ? item.getClass() : null)); } - ui.setSelectedItem(e.getItem()); + ((JTextComponent) combobox.getEditor().getEditorComponent()).setForeground(null); + ui.setSelectedItem(item); + } else { if (log.isDebugEnabled()) { log.debug("itemStateChanged deselected " + item + " - " + (item != null ? item.getClass() : null)); } + ((JTextComponent) combobox.getEditor().getEditorComponent()).setForeground(ui.getInvalidComboEditorTextColor()); } } }); @@ -330,8 +333,6 @@ } public void reset() { - JTextComponent editorComponent = (JTextComponent) ui.getCombobox().getEditor().getEditorComponent(); - editorComponent.setText(""); ui.setSelectedItem(null); JComboBox comboBox = ui.getCombobox(); if (comboBox.isShowing()) { @@ -438,6 +439,22 @@ ui.getCombobox().requestFocus(); } + protected void unselectItem() { + if (ui.selectedItem == null) { + return; + } + + ui.selectedItem = null; + try { + Method mut = getMutator(); + if (mut != null) { + mut.invoke(ui.getBean(), (O)null); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + /** * Modifie la valeur sélectionnée dans la liste déroulante. * @@ -445,23 +462,17 @@ * @param newValue la nouvelle valeur */ protected void setSelectedItem(O oldValue, O newValue) { - if (ui.getBean() == null) { + if (oldValue == null && newValue == null) { return; } - + if (!getBeanType().isInstance(newValue)) { newValue = null; } - if (newValue == null) { - if (ui.getCombobox().getSelectedItem() == null) { - return; - } - ui.getCombobox().setSelectedItem(null); - if (oldValue == null) { - return; - } - } + JTextComponent editorComponent = (JTextComponent) ui.getCombobox().getEditor().getEditorComponent(); + editorComponent.setText(""); + if (log.isDebugEnabled()) { log.debug(ui.getProperty() + " on " + getBeanType() + " :: " + oldValue + " to " + newValue); } @@ -579,14 +590,9 @@ } try { wrapped.setItem(item); - getEditorComponent().setForeground(null); } catch (IllegalStateException e) { // fail silently - if (log.isDebugEnabled()) { - log.debug("setItem IllegalStateException "); - } - getEditorComponent().setForeground(ui.getInvalidComboEditorTextColor()); } } }