Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo, ich habe bereits das Forum durchsucht und komme leider einfach nicht weiter.

Ich erstelle in der einer meiner Klassen die JTable.

String[] columnNames = {"test","test1"};

Object[][] data = {};

JTable table = new JTable(data, columnNames);

JScrollPane scrollPane = new JScrollPane(table);

table.setFillsViewportHeight(true);

table.setEnabled(false);

mainPanel.add(scrollPane);

Schön, das funzt logischerweise Prima. In einer anderen Klasse erstelle ich nun aus bestimmten eingelesenen Daten ein 2-dimensionales Array welches nun den neuen Tabelleninhalt darstellen soll.

Ich habe gelesen, dass die Sache mit fireTableChanged() funktionieren soll, aber das gibt es für eine normale JTable ja nicht. Hat jemand einen Tipp für mich oder ein ganz simples Beispiel? Wie gesagt, ich will nur den Inhalt durch das Array ersetzten nichts weiter.

Danke

übergib deiner Tabelle doch einfach ein neues defaultModel, welches die von dir gewünschten Werte beinhaltet

mh, also irgendwie hilft mir das nicht wirklich weiter. wie genau soll das denn aussehen? könntest du evtl. n codebeispiel bringen?

ungetestet, da in notepad "entwickelt" :D

table.setModel(new DefaultTableModel(data, columnNames));

hmm, soweit ich weiss, haben alle Nachkommen von AbstractTableModel, also auch DefaultTableModel, die Methode fireTableDataChanged(), die Du dann aufrufen kannst.

Du solltest Dir nur eine Referenz auf Dein TableModel behalten, also in etwa so:


String[] columnNames = {"test","test1"};

Object[][] data = {};

[color=red]DefaultTableModel model = new DefaultTableModel(data, columnNames);

JTable table = new JTable(model);[/color]

JScrollPane scrollPane = new JScrollPane(table);

table.setFillsViewportHeight(true);

table.setEnabled(false);

Dann kannst Du bequem Dein Array mit Werten füllen und per:

model.fireTableDataChanged() mitteilen, dass die Table komplett neu gezeichnet werden muss.

Aber denk dran, dass Object[][] data auch wirklich korrekt instanziiert ist.

Ok, ich habe das Problem nun gelöst, allerdings ohne fireTableDataChanged().

Hier mal mein Code:

private static DefaultTableModel model = new DefaultTableModel();

String[] columnNames = {};

Object[][] data = {};

model.setDataVector(data, columnNames);

JTable table = new JTable(model);

JScrollPane scrollPane = new JScrollPane(table);

und dann halt noch die Methode zum neuSchreiben in der selben Klasse:

public static void neueTabelle(String[][] _neueWerte)

{

String[] columnNames = {"Wert1","Wert2","Wert3","Wert4"};

model.setDataVector(_neueWerte, columnNames);

}

Bearbeitet von Jana_

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.