Benutzer-Werkzeuge

Webseiten-Werkzeuge


programmieren:java:praktische_gui_klassen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
programmieren:java:praktische_gui_klassen [2016/12/01 12:21]
andreas [Vorlage]
programmieren:java:praktische_gui_klassen [2016/12/01 13:52]
andreas
Zeile 202: Zeile 202:
             jDialog.dispose();             jDialog.dispose();
         }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);         }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
 +    }
 +
 +}
 +</code>
 +
 +===== 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("Limit can not be <= 0!");
 +        }
 +        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, text.length() - overLimit);
 +        }
 +        if (text.length() >= 0) {
 +            super.replace(fb, offset, length, text, attrs);
 +        }
 +    }
 +}
 +</code>
 +
 +===== 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, TableRowSorter tableRowSorter) {
 +        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<TableModel, Integer> {
 +
 +        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; i++) {
 +                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; i++) {
 +                // 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(); j++) {
 +                    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