Probleme beim Refresh von JTable

Letavino

Aktives Mitglied
Hallo,
ich habe ein Problem beim Erneuern meiner Tabelle.
Auch nach längerem Googeln ist mir nicht ganz klar, wie ich das am besten handhaben könnte, bzw wo bei meinem jetzigen Versuch der Fehler liegt.

Java:
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

public class Tabelle 
{
	public static JPanel rechts()
	{
		JPanel tabelle = new JPanel();
		
		int spalten = 4;
		
		String[] titel = new String[spalten];
		String[][] daten = Datenbank.tabelle();
		
		titel[0] = "Kunde";
		titel[1] = "Programm";
		titel[2] = "Lizenz";
		titel[3] = "Ablaufdatum";
		
		
		TableModel  model = new DefaultTableModel(daten,titel){
		    public boolean isCellEditable(int row, int column){
	            return false;
	        }
		};
	
		JTable jtable = new JTable(model);
		
		TableRowSorter<TableModel> rowSorter = new TableRowSorter<TableModel>(model);
		jtable.setRowSorter(rowSorter);
		 
		tabelle.add(new JScrollPane(jtable));
		
		return tabelle;
	}
	public void refresh()
	{
		model.fireTableDataChanged();
	}
}

So habe ich es bisher versucht zu lösen, was aber einen Fehler an der Stelle
Java:
model.fireTableDataChanged();
ergibt.
Java:
model cannot be resolved

Wie kann ich eine Refreshfunktion einbauen, die man von überall aus dem Programm leicht erreichen kann?

€: Wie kann ich meine Tabelle vorsortieren?
Gibt es dafür auch eine einfach Möglichkeit mit Java, oder muss ich das Array vor der Übergabe sortieren?


Lg, Florian
 
Zuletzt bearbeitet:
Grundsätzlich ist es unschön in einer objektorientierten Sprache (wenn es nicht sein muss) mit statischen Methoden zu arbeiten. Aber das sei einem Anfänger verziehen.

So habe ich es bisher versucht zu lösen, was aber einen Fehler an der Stelle
Java:
model.fireTableDataChanged();
ergibt.
Java:
model cannot be resolved
Entweder die Variable model final machen oder als Klassenvariable definieren.
€: Wie kann ich meine Tabelle vorsortieren?
Gibt es dafür auch eine einfach Möglichkeit mit Java, oder muss ich das Array vor der Übergabe sortieren?
Woher kommt das Array? Aus einer Datenbankabfrage? Dann könnte man sich den ResultSet von der Datenbank sortiert geben lassen.
 
So könen wir die JTable sortieren:
Java:
...
    private final TableRowSorter<TableModel> rowSorter;
...
        rowSorter = new TableRowSorter<TableModel>(model);
...
        //sortieren:
        sortTable(SortOrder.ASCENDING);
...
    //Methode zum Sortieren der ersten Spalte:
    private void sortTable(final SortOrder order) {
        ArrayList<RowSorter.SortKey> list = new ArrayList<RowSorter.SortKey>(1);
        list.add(new RowSorter.SortKey(0, order));
        rowSorter.setSortKeys(list);
        rowSorter.sort();
    }
...

Gruß,
André
 
Danke schonmal.

Den Unterschied zwischen statischen und nicht-statischen Methoden werde ich mir wohl noch einmal anschauen müssen.
Ich bin ja um einen vernünftigen Programmierstil bemüht. 🙂

Java:
final TableModel  model = new DefaultTableModel(daten,titel){
		    public boolean isCellEditable(int row, int column){
	            return false;
	        }
Das bringt soweit keine Veränderung mit sich.

Das auslagern des TableModel model als Klassenvariable wirft eine Nullpointer Exception.
Macht ja auch Sinn, da es ja so nicht weiter definiert ist.
Was muss ich noch auslagern, damit es klappt, wie es soll?
(Wahrscheinlich steh ich jetzt etwas auf dem Schlauch.)

Mit dem sortieren:
Es funktioniert nun mit Andrés Lösungsvorschlag soweit.
Es gibt noch einen Fehler, der aber auf meiner Seite liegt, da ich in den Zellen jeweils ein Datum stehen habe und er das als String sortiert.
Aber ich denke, das bekomme ich auch noch gelöst. 😉
 
Versuch's mal so:

Java:
...
public class Tabelle {

    private DefaultTableModel model;

    public JPanel rechts() {
...
        model = new DefaultTableModel(daten, titel) {
...

Gruß,
André
 
Danke!
Fehlermeldung kommt dabei nun keine mehr.
Dennoch wird die Tabelle noch nicht 'refreshed'.
Ich nehme an, es liegt daran, dass ich dem Model ja noch keine neuen Werte zugewisen habe.
Wie kann ich das ganze nun so erweitern, dass er nochmals die Datenbankabfrage durchführt und daraufhin eine neue Tabelle ermittelt?
Ich habe gerade noch einmal ein wenig gegoogelt, aber leider immernoch keine hilfreiche Übersicht gefunden.
 
Java:
    private String[] titel;
...
        titel = new String[spalten];
...
        model.setDataVector(Datenbank.tabelle(), titel);
 

Neue Themen


Zurück
Oben