tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
496
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Java_Bruno Java_Bruno ist offline Rookie
    Registriert seit
    Jan 2010
    Beiträge
    8
    Hallo zusammen

    Obwohl ich schon mehrere Tage damit verbracht habe, komme ich einfach nicht weiter. Wahrscheinlich habe ich irgendwo den falschen Ansatz aber weiss echt nicht wo.

    Ich habe eine JTable erstellt, welche durch ein XML Dokument befüllt wird. Nun möchte ich über ein Textfeld einen Zeichenkettenausdruck eingeben und danach sollte die Tabelle nach diesem Ausdruck durchsucht werden.

    Ich habe es zwar hingekriegt, dass die erste Zeile in welcher der Begriff vorkommt markiert wird, aber ein Filter wird nicht gesetzt.

    Könnt Ihr mir weiterhelfen, bevor ich noch mit dem Ding ganz verzweifle?

    Bin für jede Hilfe dankbar.
    Gruss
    Bruno


    Hier ist mal der Java Quellcode ohne GUI Teil:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    
    import java.awt.*;
    import java.awt.event.*;
    import java.beans.*;
    import java.io.*;
    import java.util.ArrayList;
    import java.util.regex.PatternSyntaxException;
     
    import javax.swing.*;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableCellEditor;
    import javax.swing.table.TableModel;
    import javax.swing.table.TableRowSorter;
     
    public class TableSave extends JFrame {
     
        private String filename = "D:/Bruno/Workspace/AddressBook01/Adressdatenbank 1.xml";
        private JTable table;
        private MyTableModel tableModel;
        private MyColumnModel columnModel;
        private TableRowSorter<TableModel> sorter;
        private JButton searchTableButton;
        private JLabel jLabel1;
        private JLabel suchLabel;
        private JTextField suchText;
        private JScrollPane jScrollPane1;
        private String defaultAdressdatei;
        
        public TableSave() {
            super("TableSaveColumns");
            
            jLabel1 = new JLabel();
            jScrollPane1 = new JScrollPane();
            searchTableButton = new JButton();
            suchLabel = new JLabel();
            suchText = new JTextField();
            setTitle("MAD");
            jLabel1.setText("Adressdatenbank");
            suchText.setText("SuchText");
            suchLabel.setText("Suchbegriff");
            searchTableButton.setText("Suchen");
            defaultAdressdatei = "D:/Bruno/Workspace/AddressBook01/Adressdatenbank 1.xml";
            setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
            setSize(800, 600);
            setLocationRelativeTo(null);
            
            tableModel = new MyTableModel();
            table = new JTable(tableModel);
            table.setAutoCreateRowSorter(true);
            sorter = new TableRowSorter<TableModel>(tableModel);
            table.setModel(tableModel);
            getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
            columnModel = new MyColumnModel();
            table.setColumnModel(columnModel);
            tableModel.addRow(new Object[]{"Name", "Vorname", "Strasse", "Nummer", "PLZ", "Ort", "Kennzeichnung", "Gruppe"});
            loadTable();
     
            addWindowListener(new WindowAdapter() {
     
                public void windowClosing(final WindowEvent evt) {
                    dispose();
                }
            });
     
            searchTableButton.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    String text = suchText.getText();
                    suche(text);
                }
                
                private void suche(String suchBegriff){
                    for(int i=0; i<table.getColumnCount(); i++){
                        for(int j=0; j < table.getRowCount();j++){
                            if(table.getValueAt(j,i).toString().contains(suchBegriff)){
                                table.setRowSelectionInterval(j,j);
                                sorter.setRowFilter(RowFilter.regexFilter(suchBegriff));
                                break;
                            }
                        }
                    }
                }
            });
            
        }
     
        private boolean loadTable() {
            try {
                String filename = "D:/Bruno/Workspace/AddressBook01/Adressdatenbank 1.xml";
                XMLDecoder d = new XMLDecoder(new BufferedInputStream(new FileInputStream(filename)));
                tableModel = (MyTableModel) d.readObject();
                table.setModel(tableModel);
                columnModel = (MyColumnModel) d.readObject();
                table.setColumnModel(columnModel);
                jScrollPane1.setViewportView(table);
    Geändert von sheel (30.09.11 um 17:57 Uhr) Grund: Codetags
     

  2. #2
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    Hi
    packe deinen Code bitte in die Java-Tags (siehe meine Signatur). Außerdem ist der Code nicht vollständig (sondern offensichtlich unten abgeschnitten).
    Was funktioniert an diesem Filter nicht? Gibt es Fehlermeldungen?
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  3. #3
    Java_Bruno Java_Bruno ist offline Rookie
    Registriert seit
    Jan 2010
    Beiträge
    8
    Hi
    schon mal danke für deine Nachricht. Jo sorry hatte die HTML Tags erwischt. Nachfolgend mein Code mit den HTML Tags.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    
    import java.awt.*;
    import java.awt.event.*;
    import java.beans.*;
    import java.io.*;
    import java.util.ArrayList;
    import java.util.regex.PatternSyntaxException;
     
    import javax.swing.*;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableCellEditor;
    import javax.swing.table.TableModel;
    import javax.swing.table.TableRowSorter;
     
    public class Jtable_XML extends JFrame {
     
        private String filename = "D:/Bruno/Workspace/AddressBook01/Adressdatenbank 1.xml";
        private JTable table;
        private MyTableModel tableModel;
        private MyColumnModel columnModel;
        private TableRowSorter<TableModel> sorter;
        private JButton searchTableButton;
        private JLabel jLabel1;
        private JLabel suchLabel;
        private JTextField suchText;
        private JScrollPane jScrollPane1;
        private String defaultAdressdatei;
        
        public Jtable_XML() {
            super("TableSaveColumns");
            
            jLabel1 = new JLabel();
            jScrollPane1 = new JScrollPane();
            searchTableButton = new JButton();
            suchLabel = new JLabel();
            suchText = new JTextField();
            setTitle("MAD");
            jLabel1.setText("Adressdatenbank");
            suchText.setText("SuchText");
            suchLabel.setText("Suchbegriff");
            searchTableButton.setText("Suchen");
            defaultAdressdatei = "D:/Bruno/Workspace/AddressBook01/Adressdatenbank 1.xml";
            setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
            setSize(800, 600);
            setLocationRelativeTo(null);
            
            tableModel = new MyTableModel();
            table = new JTable(tableModel);
            table.setAutoCreateRowSorter(true);
            sorter = new TableRowSorter<TableModel>(tableModel);
            table.setModel(tableModel);
            getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
            columnModel = new MyColumnModel();
            table.setColumnModel(columnModel);
            tableModel.addRow(new Object[]{"Name", "Vorname", "Strasse", "Nummer", "PLZ", "Ort", "Kennzeichnung", "Gruppe"});
            loadTable();
     
            addWindowListener(new WindowAdapter() {
     
                public void windowClosing(final WindowEvent evt) {
                    dispose();
                }
            });
     
            searchTableButton.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    String text = suchText.getText();
                    suche(text);
                }
                
                private void suche(String suchBegriff){
                    for(int i=0; i<table.getColumnCount(); i++){
                        for(int j=0; j < table.getRowCount();j++){
                            System.out.println("Row: " + j+ " Column: " + i + "suchBegriff: "+suchBegriff);
                            if(table.getValueAt(j,i).toString().contains(suchBegriff)){
                                System.out.println("j: " + j+ " i: " + i + "suchBegriff: "+suchBegriff);
                                table.setRowSelectionInterval(j,j);
                                sorter.setRowFilter(RowFilter.regexFilter(suchBegriff));
                                break;
                            }
                        }
                    }
                }
            });
            
        }
     
     
        private boolean loadTable() {
            try {
                String filename = "D:/Bruno/Workspace/AddressBook01/Adressdatenbank 1.xml";
                XMLDecoder d = new XMLDecoder(new BufferedInputStream(new FileInputStream(filename)));
                tableModel = (MyTableModel) d.readObject();
                table.setModel(tableModel);
                columnModel = (MyColumnModel) d.readObject();
                table.setColumnModel(columnModel);
                jScrollPane1.setViewportView(table);
                
                javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
                getContentPane().setLayout(layout);
                layout.setHorizontalGroup(
                    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addContainerGap()
                                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 885, Short.MAX_VALUE))
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addGap(95, 95, 95)
                                        .addComponent(suchText, javax.swing.GroupLayout.DEFAULT_SIZE, 99, Short.MAX_VALUE)
                                        .addGap(42, 42, 42))
                                    .addGroup(layout.createSequentialGroup()
                                        .addContainerGap()
                                        .addComponent(searchTableButton)
                                        .addGap(18, 18, 18)))
                                .addGap(661, 661, 661)))
                        .addContainerGap())
                );
                layout.setVerticalGroup(
                    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(274, 274, 274)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 132, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(suchText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(searchTableButton)
                        .addGap(52, 52, 52))
                );
     
                pack();
                
                d.close();
            } catch (FileNotFoundException ex) {
                return false;
            }
            return true;
            
        }
     
        public static void main(final String args[]) {
            EventQueue.invokeLater(new Runnable() {
     
                public void run() {
                    new Jtable_XML().setVisible(true);
                }
            });
        }
        
     
    }

    Dies ist nun die vollständige Klasse.

    Das Projekt besteht dann noch aus zwei weiteren Klassen:

    - MyTableModel.java
    - MyColumnModel.java

    Und eine XML-Datei.

    Der Code läuft auch wenn ich auf 'Suchen' klicke. Er markiert dann eine eventuelle Zeile, in welcher der Suchbegriff vorkommt, aber er filtert nicht die anderen Zeilen aus.

    Die Java Insel habe ich, bin jedoch leider wirklich nicht mehr weitergekommen.

    Wäre weiterhin dankbar um Hilfe und Tipps.
    Gruss
    Bruno
     

  4. #4
    Java_Bruno Java_Bruno ist offline Rookie
    Registriert seit
    Jan 2010
    Beiträge
    8
    Leider habe ich keine Hilfe mehr erhalten. Konnte es aber nun selber lösen.
     

Ähnliche Themen

  1. JTable Filtern
    Von Java_Bruno im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 24.09.11, 16:57
  2. JTable filtern
    Von javama im Forum Java
    Antworten: 1
    Letzter Beitrag: 21.02.11, 16:16
  3. JTable sortieren/filtern, dann getSelectedRows()
    Von darkmagic2002 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 3
    Letzter Beitrag: 01.09.09, 20:30
  4. Antworten: 4
    Letzter Beitrag: 03.06.07, 16:39
  5. JTable Column (Spalten ausblenden/filtern?)
    Von sportingt im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 5
    Letzter Beitrag: 10.11.05, 10:15