programmieren:java:praktische_gui_klassen
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
programmieren:java:praktische_gui_klassen [2016/12/01 12:21] – [Vorlage] andreas | programmieren:java:praktische_gui_klassen [2016/12/01 13:52] (aktuell) – andreas | ||
---|---|---|---|
Zeile 202: | Zeile 202: | ||
jDialog.dispose(); | jDialog.dispose(); | ||
}, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, | }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== LimitDocumentFilter ===== | ||
+ | <code java LimitDocumentFilter.java> | ||
+ | import javax.swing.text.AttributeSet; | ||
+ | import javax.swing.text.BadLocationException; | ||
+ | import javax.swing.text.DocumentFilter; | ||
+ | |||
+ | public class LimitDocumentFilter extends DocumentFilter { | ||
+ | |||
+ | public final int limit; | ||
+ | |||
+ | public LimitDocumentFilter(int limit) { | ||
+ | if (limit <= 0) { | ||
+ | throw new IllegalArgumentException(" | ||
+ | } | ||
+ | this.limit = limit; | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { | ||
+ | int currentLength = fb.getDocument().getLength(); | ||
+ | int overLimit = (currentLength + text.length()) - limit - length; | ||
+ | if (overLimit > 0) { | ||
+ | text = text.substring(0, | ||
+ | } | ||
+ | if (text.length() >= 0) { | ||
+ | super.replace(fb, | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== TableSearchDocumentListener ===== | ||
+ | <code java TableSearchDocumentListener.java> | ||
+ | import javax.swing.JTextField; | ||
+ | import javax.swing.RowFilter; | ||
+ | import javax.swing.event.DocumentEvent; | ||
+ | import javax.swing.event.DocumentListener; | ||
+ | import javax.swing.table.TableModel; | ||
+ | import javax.swing.table.TableRowSorter; | ||
+ | |||
+ | public class TableSearchDocumentListener implements DocumentListener { | ||
+ | |||
+ | private final JTextField searchTextField; | ||
+ | private final TableRowSorter tableRowSorter; | ||
+ | |||
+ | public TableSearchDocumentListener(JTextField searchTextField, | ||
+ | this.searchTextField = searchTextField; | ||
+ | this.tableRowSorter = tableRowSorter; | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void insertUpdate(DocumentEvent e) { | ||
+ | updateTableRowSorter(); | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void removeUpdate(DocumentEvent e) { | ||
+ | updateTableRowSorter(); | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void changedUpdate(DocumentEvent e) { | ||
+ | updateTableRowSorter(); | ||
+ | } | ||
+ | |||
+ | private void updateTableRowSorter() { | ||
+ | String searchFieldText = searchTextField.getText(); | ||
+ | |||
+ | if (searchFieldText != null) { | ||
+ | String[] keywords = searchFieldText.split(" | ||
+ | tableRowSorter.setRowFilter(new KeywordFilter(keywords)); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | public class KeywordFilter extends RowFilter< | ||
+ | |||
+ | private final String[] keywords; | ||
+ | |||
+ | // Constructor for filtering a single keyword | ||
+ | public KeywordFilter(String keyword) { | ||
+ | this.keywords = new String[1]; | ||
+ | this.keywords[0] = keyword.toLowerCase(); | ||
+ | } | ||
+ | |||
+ | // Constructor for filtering an array of keywords | ||
+ | // Only the rows that contain every keyword are displayed | ||
+ | public KeywordFilter(String[] keywords) { | ||
+ | this.keywords = keywords; | ||
+ | // convert all keywords to lower case | ||
+ | for (int i = 0; i < keywords.length; | ||
+ | keywords[i] = keywords[i].toLowerCase(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public boolean include(RowFilter.Entry entry) { | ||
+ | // Does the row contain all keywords? Assume true and set to false if | ||
+ | // one is missing | ||
+ | boolean containsAll = true; | ||
+ | for (int i = 0; containsAll == true && i < keywords.length; | ||
+ | // Is the keyword contained in one of the columns? Assume false and | ||
+ | // set to true if it is found | ||
+ | boolean containsThis = false; | ||
+ | for (int j = 0; containsThis == false && j < entry.getValueCount(); | ||
+ | if (entry.getStringValue(j).toLowerCase().contains(keywords[i])) { | ||
+ | containsThis = true; | ||
+ | } | ||
+ | } | ||
+ | if (!containsThis) { | ||
+ | containsAll = false; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | return containsAll; | ||
+ | } | ||
+ | |||
} | } | ||
programmieren/java/praktische_gui_klassen.txt · Zuletzt geändert: 2016/12/01 13:52 von andreas