opa, consegui implementar o ClasseAutoComplete sugerido pelo ViniGodoy desta forma:
// formata a combo rivatevoiddecoraComboContrib(){grafica.ClasseAutoComplete.decorate(ComboContrib);}//preenche a combo privatevoidComboContrib(){ObjectcodSituacao,nomeSituacoes;conn.executeSQL("SELECT s.id_situacao,s.nome_situacoes"+" FROM SITUACOES s ORDER BY id_situacao");try{ComboContrib.addItem("Selecione");while(conn.resultset.next()){codSituacao=conn.resultset.getInt("id_situacao");nomeSituacoes=conn.resultset.getString("nome_situacoes");ComboContrib.addItem(nomeSituacoes);}}catch(SQLExceptionex){Logger.getLogger(NovoServico.class.getName()).log(Level.SEVERE,null,ex);}}
até ai blz, só gostaria de saber se tem como liberar a digitação de dados na combo q nao estejam na mesma combo.
ex.:
tipo tenho uma lista ja cadastrada na combo
"Carlos" e "José"
entao agora se você digitar "M" nada acontece, pq está "bloqueado".
gostaria de saber se tem como liberar para que eu possa digitar outros dados mesmo que nao tenha no cadastro????
Os links que aparece no link que vc me passou estão dando um erro no site…
The file /web/projects/swingx/files/documents/2981/153006/swingx-1.6.2-sources.zip appears to be missing.
valeu
Z
zicky23
achei o mesmo arquivo no 4shared.
fiz o download só nao sei como faço pra instalar no netbeans?
valeu
Z
zicky23
pessoal descobri aki pesquinsando é que preciso que o autocomplete deve ser nonstrict para que possa ser digitado outros dados além do que está cadastrado.
como faço pra liberar isso no autoComplete abaixo?
packagemodel;importjava.awt.event.ActionEvent;importjava.awt.event.FocusAdapter;importjava.awt.event.FocusEvent;importjava.awt.event.KeyAdapter;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;importjava.beans.PropertyChangeEvent;importjava.beans.PropertyChangeListener;importjavax.swing.Action;importjavax.swing.ActionMap;importjavax.swing.ComboBoxEditor;importjavax.swing.InputMap;importjavax.swing.JComboBox;importjavax.swing.KeyStroke;importjavax.swing.UIManager;importjavax.swing.text.DefaultEditorKit;importjavax.swing.text.JTextComponent;importjavax.swing.text.TextAction;importorg.jdesktop.swingx.autocomplete.AbstractAutoCompleteAdaptor;importorg.jdesktop.swingx.autocomplete.AutoCompleteComboBoxEditor;importorg.jdesktop.swingx.autocomplete.AutoCompleteDocument;importorg.jdesktop.swingx.autocomplete.ComboBoxAdaptor;importorg.jdesktop.swingx.autocomplete.ObjectToStringConverter;importorg.jdesktop.swingx.autocomplete.workarounds.AquaLnFPopupLocationFix;/** * This class contains only static utility methods that can be used to set up * automatic completion for some Swing components. * <p> * Usage examples: * </p> * <p> * * <pre><code> * JComboBox comboBox = [...]; * AutoCompleteDecorator.<b>decorate</b>(comboBox); * * List items = [...]; * JTextField textField = [...]; * AutoCompleteDecorator.<b>decorate</b>(textField, items); * * JList list = [...]; * JTextField textField = [...]; * AutoCompleteDecorator.<b>decorate</b>(list, textField); * </code></pre> * * </p> * * @author Thomas Bierhance */publicclassClasseAutoComplete{/** * Enables automatic completion for the given JComboBox. The automatic * completion will be strict (only items from the combo box can be selected) * if the combo box is not editable. * * @param comboBox a combo box */publicstaticvoiddecorate(finalJComboBoxcomboBox){decorate(comboBox,ObjectToStringConverter.DEFAULT_IMPLEMENTATION);}/** * Enables automatic completion for the given JComboBox. The automatic * completion will be strict (only items from the combo box can be selected) * if the combo box is not editable. * * @param comboBox a combo box * @param stringConverter the converter used to transform items to strings */publicstaticvoiddecorate(finalJComboBoxcomboBox,finalObjectToStringConverterstringConverter){booleanstrictMatching=!comboBox.isEditable();// has to be editablecomboBox.setEditable(true);// fix the popup locationAquaLnFPopupLocationFix.install(comboBox);// configure the text component=editor componentJTextComponenteditorComponent=(JTextComponent)comboBox.getEditor().getEditorComponent();finalAbstractAutoCompleteAdaptoradaptor=newComboBoxAdaptor(comboBox);finalAutoCompleteDocumentdocument=newAutoCompleteDocument(adaptor,strictMatching,stringConverter);decorate(editorComponent,document,adaptor);// show the popup list when the user presses a keyfinalKeyListenerkeyListener=newKeyAdapter(){@OverridepublicvoidkeyPressed(KeyEventkeyEvent){// don't popup on action keys (cursor movements, etc...)if(keyEvent.isActionKey())return;// don't popup if the combobox isn't visible anywayif(comboBox.isDisplayable()&&!comboBox.isPopupVisible()){intkeyCode=keyEvent.getKeyCode();// don't popup when the user hits shift,ctrl or altif(keyCode==KeyEvent.VK_SHIFT||keyCode==KeyEvent.VK_CONTROL||keyCode==KeyEvent.VK_ALT)return;// don't popup when the user hits escape (see issue #311)if(keyCode==KeyEvent.VK_ESCAPE||keyCode==KeyEvent.VK_ENTER)return;if(keyEvent.isAltDown()||keyEvent.isControlDown())return;comboBox.setPopupVisible(true);}}};editorComponent.addKeyListener(keyListener);if(stringConverter!=ObjectToStringConverter.DEFAULT_IMPLEMENTATION){comboBox.setEditor(newAutoCompleteComboBoxEditor(comboBox.getEditor(),stringConverter));}// Changing the l&f can change the combobox' editor which in turn// would not be autocompletion-enabled. The new editor needs to be// set-up.comboBox.addPropertyChangeListener("editor",newPropertyChangeListener(){publicvoidpropertyChange(PropertyChangeEvente){ComboBoxEditoreditor=(ComboBoxEditor)e.getNewValue();if(editor!=null&&editor.getEditorComponent()!=null){if(!(editorinstanceofAutoCompleteComboBoxEditor)&&stringConverter!=ObjectToStringConverter.DEFAULT_IMPLEMENTATION){comboBox.setEditor(newAutoCompleteComboBoxEditor(editor,stringConverter));// Don't do the decorate step here because// calling setEditor will trigger// the propertychange listener a second time,// which will do the decorate// and addKeyListener step.}else{decorate((JTextComponent)editor.getEditorComponent(),document,adaptor);editor.getEditorComponent().addKeyListener(keyListener);}}}});}/** * Decorates a given text component for automatic completion using the given * AutoCompleteDocument and AbstractAutoCompleteAdaptor. * * @param textComponent a text component that should be decorated * @param document the AutoCompleteDocument to be installed on the text * component * @param adaptor the AbstractAutoCompleteAdaptor to be used */publicstaticvoiddecorate(JTextComponenttextComponent,AutoCompleteDocumentdocument,finalAbstractAutoCompleteAdaptoradaptor){// install the document on the text componenttextComponent.setDocument(document);// mark entire text when the text component gains focus// otherwise the last mark would have been retained which is quiet// confusingtextComponent.addFocusListener(newFocusAdapter(){@OverridepublicvoidfocusGained(FocusEvente){adaptor.markEntireText();}});// Tweak some key bindingsInputMapeditorInputMap=textComponent.getInputMap();if(document.isStrictMatching()){// move the selection to the left on VK_BACK_SPACEeditorInputMap.put(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_BACK_SPACE,0),DefaultEditorKit.selectionBackwardAction);// ignore VK_DELETE and CTRL+VK_X and beep instead when strict// matchingeditorInputMap.put(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_DELETE,0),errorFeedbackAction);editorInputMap.put(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X,java.awt.event.InputEvent.CTRL_DOWN_MASK),errorFeedbackAction);}else{ActionMapeditorActionMap=textComponent.getActionMap();// leave VK_DELETE and CTRL+VK_X as is// VK_BACKSPACE will move the selection to the left if the selected// item is in the list// it will delete the previous character otherwiseeditorInputMap.put(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_BACK_SPACE,0),"nonstrict-backspace");editorActionMap.put("nonstrict-backspace",newNonStrictBackspaceAction(editorActionMap.get(DefaultEditorKit.deletePrevCharAction),editorActionMap.get(DefaultEditorKit.selectionBackwardAction),adaptor));}}staticclassNonStrictBackspaceActionextendsTextAction{Actionbackspace;ActionselectionBackward;AbstractAutoCompleteAdaptoradaptor;publicNonStrictBackspaceAction(Actionbackspace,ActionselectionBackward,AbstractAutoCompleteAdaptoradaptor){super("nonstrict-backspace");this.backspace=backspace;this.selectionBackward=selectionBackward;this.adaptor=adaptor;}publicvoidactionPerformed(ActionEvente){if(adaptor.listContainsSelectedItem()){selectionBackward.actionPerformed(e);}else{backspace.actionPerformed(e);}}}/** * A TextAction that provides an error feedback for the text component that * invoked the action. The error feedback is most likely a "beep". */staticObjecterrorFeedbackAction=newTextAction("provide-error-feedback"){publicvoidactionPerformed(ActionEvente){UIManager.getLookAndFeel().provideErrorFeedback(getTextComponent(e));}};}
Z
zicky23
dai pessoal..
consegui fazer o que eu qria..
para quem estava na mesma dúvida que eu ta ai o código pronto.
packagemodel;importjava.awt.event.ActionEvent;importjava.awt.event.FocusAdapter;importjava.awt.event.FocusEvent;importjava.awt.event.KeyAdapter;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;importjava.beans.PropertyChangeEvent;importjava.beans.PropertyChangeListener;importjavax.swing.Action;importjavax.swing.ActionMap;importjavax.swing.ComboBoxEditor;importjavax.swing.InputMap;importjavax.swing.JComboBox;importjavax.swing.KeyStroke;importjavax.swing.UIManager;importjavax.swing.text.DefaultEditorKit;importjavax.swing.text.JTextComponent;importjavax.swing.text.TextAction;importorg.jdesktop.swingx.autocomplete.AbstractAutoCompleteAdaptor;importorg.jdesktop.swingx.autocomplete.AutoCompleteComboBoxEditor;importorg.jdesktop.swingx.autocomplete.AutoCompleteDocument;importorg.jdesktop.swingx.autocomplete.ComboBoxAdaptor;importorg.jdesktop.swingx.autocomplete.ObjectToStringConverter;importorg.jdesktop.swingx.autocomplete.workarounds.AquaLnFPopupLocationFix;/** * This class contains only static utility methods that can be used to set up * automatic completion for some Swing components. * <p> * Usage examples: * </p> * <p> * * <pre><code> * JComboBox comboBox = [...]; * AutoCompleteDecorator.<b>decorate</b>(comboBox); * * List items = [...]; * JTextField textField = [...]; * AutoCompleteDecorator.<b>decorate</b>(textField, items); * * JList list = [...]; * JTextField textField = [...]; * AutoCompleteDecorator.<b>decorate</b>(list, textField); * </code></pre> * * </p> * * @author Thomas Bierhance */publicclassClasseAutoComplete{/** * Enables automatic completion for the given JComboBox. The automatic * completion will be strict (only items from the combo box can be selected) * if the combo box is not editable. * * @param comboBox a combo box */publicstaticvoiddecorate(finalJComboBoxcomboBox){decorate(comboBox,ObjectToStringConverter.DEFAULT_IMPLEMENTATION);}/** * Enables automatic completion for the given JComboBox. The automatic * completion will be strict (only items from the combo box can be selected) * if the combo box is not editable. * * @param comboBox a combo box * @param stringConverter the converter used to transform items to strings */publicstaticvoiddecorate(finalJComboBoxcomboBox,finalObjectToStringConverterstringConverter){booleanstrictMatching=!comboBox.isEditable();// has to be editable comboBox.setEditable(true);// fix the popup location AquaLnFPopupLocationFix.install(comboBox);// configure the text component=editor component JTextComponenteditorComponent=(JTextComponent)comboBox.getEditor().getEditorComponent();finalAbstractAutoCompleteAdaptoradaptor=newComboBoxAdaptor(comboBox);finalAutoCompleteDocumentdocument=newAutoCompleteDocument(adaptor,false);//AKI TA A MUDANÇA - COLOCA O "false" no lugar dos "strictMatching, stringConverter" que estavam antes. valeu!!!!decorate(editorComponent,document,adaptor);// show the popup list when the user presses a key finalKeyListenerkeyListener=newKeyAdapter(){@OverridepublicvoidkeyPressed(KeyEventkeyEvent){// don't popup on action keys (cursor movements, etc...) if(keyEvent.isActionKey())return;// don't popup if the combobox isn't visible anyway if(comboBox.isDisplayable()&&!comboBox.isPopupVisible()){intkeyCode=keyEvent.getKeyCode();// don't popup when the user hits shift,ctrl or alt if(keyCode==KeyEvent.VK_SHIFT||keyCode==KeyEvent.VK_CONTROL||keyCode==KeyEvent.VK_ALT)return;// don't popup when the user hits escape (see issue #311) if(keyCode==KeyEvent.VK_ESCAPE||keyCode==KeyEvent.VK_ENTER)return;if(keyEvent.isAltDown()||keyEvent.isControlDown())return;comboBox.setPopupVisible(true);}}};editorComponent.addKeyListener(keyListener);if(stringConverter!=ObjectToStringConverter.DEFAULT_IMPLEMENTATION){comboBox.setEditor(newAutoCompleteComboBoxEditor(comboBox.getEditor(),stringConverter));}// Changing the l&f can change the combobox' editor which in turn // would not be autocompletion-enabled. The new editor needs to be // set-up. comboBox.addPropertyChangeListener("editor",newPropertyChangeListener(){publicvoidpropertyChange(PropertyChangeEvente){ComboBoxEditoreditor=(ComboBoxEditor)e.getNewValue();if(editor!=null&&editor.getEditorComponent()!=null){if(!(editorinstanceofAutoCompleteComboBoxEditor)&&stringConverter!=ObjectToStringConverter.DEFAULT_IMPLEMENTATION){comboBox.setEditor(newAutoCompleteComboBoxEditor(editor,stringConverter));// Don't do the decorate step here because // calling setEditor will trigger // the propertychange listener a second time, // which will do the decorate // and addKeyListener step. }else{decorate((JTextComponent)editor.getEditorComponent(),document,adaptor);editor.getEditorComponent().addKeyListener(keyListener);}}}});}/** * Decorates a given text component for automatic completion using the given * AutoCompleteDocument and AbstractAutoCompleteAdaptor. * * @param textComponent a text component that should be decorated * @param document the AutoCompleteDocument to be installed on the text * component * @param adaptor the AbstractAutoCompleteAdaptor to be used */publicstaticvoiddecorate(JTextComponenttextComponent,AutoCompleteDocumentdocument,finalAbstractAutoCompleteAdaptoradaptor){// install the document on the text component textComponent.setDocument(document);// mark entire text when the text component gains focus // otherwise the last mark would have been retained which is quiet // confusing textComponent.addFocusListener(newFocusAdapter(){@OverridepublicvoidfocusGained(FocusEvente){adaptor.markEntireText();}});// Tweak some key bindings InputMapeditorInputMap=textComponent.getInputMap();if(document.isStrictMatching()){// move the selection to the left on VK_BACK_SPACE editorInputMap.put(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_BACK_SPACE,0),DefaultEditorKit.selectionBackwardAction);// ignore VK_DELETE and CTRL+VK_X and beep instead when strict // matching editorInputMap.put(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_DELETE,0),errorFeedbackAction);editorInputMap.put(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X,java.awt.event.InputEvent.CTRL_DOWN_MASK),errorFeedbackAction);}else{ActionMapeditorActionMap=textComponent.getActionMap();// leave VK_DELETE and CTRL+VK_X as is // VK_BACKSPACE will move the selection to the left if the selected // item is in the list // it will delete the previous character otherwise editorInputMap.put(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_BACK_SPACE,0),"nonstrict-backspace");editorActionMap.put("nonstrict-backspace",newNonStrictBackspaceAction(editorActionMap.get(DefaultEditorKit.deletePrevCharAction),editorActionMap.get(DefaultEditorKit.selectionBackwardAction),adaptor));}}staticclassNonStrictBackspaceActionextendsTextAction{Actionbackspace;ActionselectionBackward;AbstractAutoCompleteAdaptoradaptor;publicNonStrictBackspaceAction(Actionbackspace,ActionselectionBackward,AbstractAutoCompleteAdaptoradaptor){super("nonstrict-backspace");this.backspace=backspace;this.selectionBackward=selectionBackward;this.adaptor=adaptor;}publicvoidactionPerformed(ActionEvente){if(adaptor.listContainsSelectedItem()){selectionBackward.actionPerformed(e);}else{backspace.actionPerformed(e);}}}/** * A TextAction that provides an error feedback for the text component that * invoked the action. The error feedback is most likely a "beep". */staticObjecterrorFeedbackAction=newTextAction("provide-error-feedback"){publicvoidactionPerformed(ActionEvente){UIManager.getLookAndFeel().provideErrorFeedback(getTextComponent(e));}};}