public void firePropertyChangeEvent(String searchingText) { if (!searchingText.equals(_previousSearchText)) { _propertyChangeSupport.firePropertyChange(PROPERTY_SEARCH_TEXT, _previousSearchText, searchingText); fireSearchableEvent(new SearchableEvent(this, SearchableEvent.SEARCHABLE_CHANGE, searchingText, getCurrentIndex(), _previousSearchText)); _previousSearchText = searchingText; if (searchingText.length() == 0) { searchingTextEmpty(); } } }
/** * Select the index for the searching text. * * @param index the start offset * @param searchingText the searching text presented in the searchable event to be fired here. */ protected void select(int index, String searchingText) { if (index != -1) { setSelectedIndex(index, true); setCursor(index, true); Object element = getElementAt(index); fireSearchableEvent(new SearchableEvent(this, SearchableEvent.SEARCHABLE_MATCH, searchingText, element, convertElementToString(element))); } else { setSelectedIndex(-1, false); fireSearchableEvent(new SearchableEvent(this, SearchableEvent.SEARCHABLE_NOMATCH, searchingText)); } }
protected void textChanged(String text) { if (text == null || text.length() == 0) { firePropertyChangeEvent(""); return; } int found = findFromCursor(text); if (found == -1) { firePropertyChangeEvent(text); fireSearchableEvent(new SearchableEvent(this, SearchableEvent.SEARCHABLE_NOMATCH, text)); } else { firePropertyChangeEvent(text); Object element = getElementAt(found); fireSearchableEvent(new SearchableEvent(this, SearchableEvent.SEARCHABLE_MATCH, text, element, convertElementToString(element))); } }
/** * Shows the search popup. By default, the search popup will be visible automatically when user types in the first * key (in the case of JList, JTree, JTable) or types in designated keystroke (in the case of JTextComponent). So * this method is only used when you want to show the popup manually. * * @param searchingText the searching text */ public void showPopup(String searchingText) { if (_searchableProvider == null) { fireSearchableEvent(new SearchableEvent(this, SearchableEvent.SEARCHABLE_START, searchingText)); showPopup(createSearchPopup(searchingText)); _searchableProvider = new SearchableProvider() { public String getSearchingText() { return _popup != null ? _popup.getSearchingText() : ""; } public boolean isPassive() { return true; } public void processKeyEvent(KeyEvent e) { if (_popup != null) { _popup.processKeyEvent(e); } } }; } }
@Override protected void select(int index, KeyEvent e, String searchingText) { if (index != -1) { boolean incremental = e != null && isIncrementalSelectKey(e); setSelectedIndex(index, incremental); Searchable.this.setCursor(index, incremental); _textField.setForeground(Searchable.this.getForeground()); _noMatch.setText(""); } else { _textField.setForeground(getMismatchForeground()); _noMatch.setText(getResourceString("Searchable.noMatch")); } updatePopupBounds(); if (index != -1) { Object element = getElementAt(index); fireSearchableEvent(new SearchableEvent(Searchable.this, SearchableEvent.SEARCHABLE_MATCH, searchingText, element, convertElementToString(element))); } else { fireSearchableEvent(new SearchableEvent(Searchable.this, SearchableEvent.SEARCHABLE_NOMATCH, searchingText)); } }
protected void select(int index, String searchingText, boolean incremental) { if (index != -1) { _searchable.setSelectedIndex(index, incremental); _searchable.setCursor(index, incremental); _textField.setBackground(UIDefaultsLookup.getColor("TextField.background")); _comboBox.getEditor().getEditorComponent().setBackground(UIDefaultsLookup.getColor("TextField.background")); } else { _searchable.setSelectedIndex(-1, false); _textField.setBackground(getMismatchBackground()); _comboBox.getEditor().getEditorComponent().setBackground(UIDefaultsLookup.getColor("TextField.background")); } _searchable.firePropertyChangeEvent(searchingText); if (index != -1) { Object element = _searchable.getElementAt(index); _searchable.fireSearchableEvent(new SearchableEvent(_searchable, SearchableEvent.SEARCHABLE_MATCH, searchingText, element, _searchable.convertElementToString(element))); } else { _searchable.fireSearchableEvent(new SearchableEvent(_searchable, SearchableEvent.SEARCHABLE_NOMATCH, searchingText)); } }
/** * Hides the popup. */ public void hidePopup() { if (_popup != null) { if (isHeavyweightComponentEnabled()) { _popup.hidePopupImmediately(); } else { if (_layeredPane != null) { _layeredPane.remove(_popup); _layeredPane.validate(); _layeredPane.repaint(); _layeredPane = null; } } _popup = null; _searchableProvider = null; _previousSearchText = null; fireSearchableEvent(new SearchableEvent(Searchable.this, SearchableEvent.SEARCHABLE_END, "", getCurrentIndex(), _previousSearchText)); } setCursor(-1); }