RowFilter

RLott

Grünschnabel
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:
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:
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
 
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:
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
 
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
 
Zuletzt bearbeitet:
Zurück