tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
435
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    RLott RLott ist offline Mitglied
    Registriert seit
    Jul 2004
    Beiträge
    15
    Hallo Zusammen,

    ich möchte gerne den RowFilter zwecks "Filterung über das TableModel" einsetzen - was soweit auch gut funktioniert, doch an einer Stelle komme ich nicht weiter.

    Problemstellung:

    Um die Mehrsprachigkeit zu wahren, habe ich ein Attribut "strStatus" (private Map<String, String[]> strStatus, arrayUebersetzteWerte in eine HashMap gelegt und einen Renderer für die entsprechende Tabellenzelle geschrieben:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
     
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
        {
            Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
     
            if (c instanceof JLabel)
            {
                JLabel label = (JLabel) c;
                label.setHorizontalAlignment(CENTER);
                Map<String, String[]> hsmValue = (Map<String, String[]>) value;
                String[] strTextArray = hsmValue.get(MyBundleManager.getInstance().getCurrentLocale().getLanguage());
                
    // übersetzter Wert
    if(strTextArray != null) {
                    setText(strTextArray[0]);
                }
            }
            return c;
        }

    Den RowFilter erstelle ich wie folgt:

    Code :
    1
    2
    3
    
     
    List<RowFilter<Object, Object>> arlRowFilter = new ArrayList<RowFilter<Object, Object>>();
    arlRowFilter.add(RowFilter.regexFilter("Suchtext"));

    Wie kann ich jetzt den RowFilter dazu bewegen, über das mehrsprachig gehaltene Attribut (HashMap) zu filtern ?

    Über eine Hilfe wäre ich sehr dankbar,
    Gruß
    RL
     

  2. #2
    eraser666 eraser666 ist offline Grünschnabel
    Registriert seit
    Nov 2010
    Beiträge
    3
    Sehe ich das richtig, dass du mit dem Renderer deine Tabelle füllen willst?

    Ich fülle meine Tabellen mit einem TableModel bzw. DefaultTableModel.
    Code :
    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
    
    DefaultTableModel tModel = jTable.getTableModel();
    // Erst einmal alle Einträge entfernen, um die Anzeige aktuell zu halten
            int size = tModel.getRowCount();
            for (int i=0; i<size;i++) {
                tModel.removeRow(0);
            }
    // Holen der darzustellenden Daten - in deinem Fall die Texte.
            HashMap<String, LeadImpl> leads = myModel.getLeads();
     
            for (LeadImpl lead : leads.values()) {
    // Das Object-Array muss so groß sein, wie du Spalten in der Tabelle hast. Kann man auch per jTable.getColumnCount() ermitteln falls nötig
                Object[] row = new Object[4];
     
    // Setzen der Werte aus iterierten Item
                row[0] = lead.getQualifizierung();
                row[1] = lead.getStatus();
                row[2] = lead.getBuchungsdatumAsString();
                row[3] = lead.getBezeichnung();
     
    // Zeile dem Model hinzufügen
                tModel.addRow(row);
            }
            
    // Model wieder an die Table übergeben
            this.jTable.setModel(tModel);

    Bei großen Tabellen würde es sich evtl. anbieten die Werte in einer Liste bzw. ArrayList zu speichern.

    VG
    Eraser
     

  3. #3
    RLott RLott ist offline Mitglied
    Registriert seit
    Jul 2004
    Beiträge
    15
    Hallo,

    das siehst Du falsch - ich habe in meiner Anwendung ein DefaultTableModel und füllen es mit Daten aus der Datenbank.

    Der Renderer wird nur auf die Tabellenzelle gesetzt, damit ich die Mehrsprachigkeit des Wertes wahre - der Renderer kennt die übersetzen Werte des Strings mit der jeweiligen locale und setzt diesen entsprechend.

    Ich weiß jetzt nur nicht, wie ich dem RowFilter der Tabelle so konfiguriere, dass er bei der Filterung die Elemente der Map berücksichtigt...

    Ich kann ja lediglich Regex mitgeben:

    --> arlRowFilter.add(RowFilter.regexFilter("Suchtext"));

    Gruß
    BM
    Geändert von RLott (11.11.10 um 16:34 Uhr)
     

Ähnliche Themen

  1. Rowfilter auf einzelne Columns begrenzen
    Von UnkiDunki im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 10.06.08, 22:10
  2. Reguläre Ausdrücke im javax.swing.RowFilter
    Von digitalFreeman im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 3
    Letzter Beitrag: 08.08.07, 10:44
  3. JTable: rowFilter funktioniert nach DefaultTableModel nicht
    Von Dr$arez im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 01.08.07, 10:28