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] (aktuell)
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