Zurücksetzen einer jTable

Status
Nicht offen für weitere Antworten.

Dodo2110

Mitglied
Hallo mal wieder!

Diesmal geht es um das Zurücksetzen einer jTable nachdem Daten aktualisiert wurden. Nach einem erneuten Aufruf des Dialoges werden die neuen Daten nämlich nicht in der Tabelle angezeigt, sondern bleiben auf dem alten Stand.
Am besten wäre es, wenn man das jTable bei jedem Aufruf komplett neu initialisieren könnte. Gibt es Möglichkeiten dies zu realisieren?

Hier die Klasse zum Aufruf des Dialoges:
Java:
/**
	 * Klasse zum Aufruf der Entleihung nach Lesern Ausgabe
	 * Autor: 
	 */
	class JbuttonOkEntleihungLeser implements ActionListener
	{
		 public void actionPerformed(ActionEvent e)		//aufgerufen, wenn ActionEvent von Ok kommt
	  {     
			 if (jTextFieldKundnrEntleihungLeser.getText().equals(""))
			 {
				 Meldung = ("Geben Sie eine Kundennummer ein");
					getJDialogEreignis().pack();
					getJDialogEreignis().setLocationRelativeTo(null);
					getJDialogEreignis().setVisible(true);
					jLabelEreignis.setText(Meldung);
			 }
			 else
			 {
			getJDialogEntleihungLeserAusgabe().pack();
			getJDialogEntleihungLeserAusgabe().setLocationRelativeTo(null);
			getJDialogEntleihungLeserAusgabe().setVisible(true);
			}
	  
	  }
	 }

Java:
private JTable getJTableEntlLeserAusgabe() {
		if(jTableEntlLeserAusgabe == null) {
			
			EntleihungenNachLesern entlles = new EntleihungenNachLesern(jTextFieldKundnrEntleihungLeser.getText());
			final List<List<String>> EntlLeser = EntleihungenNachLesern.getEntlLeser();
            final List<String> columns = EntlLeser.get(0);
            EntlLeser.remove(0);
            TableModel jTableEntlUebersModel = new AbstractTableModel() {
 
                @Override
                public String getColumnName(int column) {
                    return columns.get(column);
                }
 
               public int getRowCount() {
                    return EntlLeser.size();
                }
 
                public int getColumnCount() {
                    return columns.size();
                }
 
                public Object getValueAt(int rowIndex, int columnIndex) {
                    return EntlLeser.get(rowIndex).get(columnIndex);
                }
                
            };
            jTableEntlLeserAusgabe = new JTable();
            jTableEntlLeserAusgabe.setModel(jTableEntlUebersModel);
            jTableEntlLeserAusgabe.setBorder(new LineBorder(new java.awt.Color(0, 0, 0), 1, false));       
		}
		return jTableEntlLeserAusgabe;
	}

Ich wüsste zudem gern, warum genau sich die jTable nicht bei jedem Aufruf neu aktualisert, nachdem Daten geändert wurden.

Hat jemand Vorschläge?

Vielen Dank im Voraus!

Gruß,
Dodo
 

madboy

Top Contributor
Du musst dein TableModel aktualisieren, dann sollte auch die Tabelle aktualisiert werden (so weit ich mich richtig erinnere).
Im Moment wird das TableModel genau wie die Tabelle nur ein Mal erstellt und danach nicht wieder verändert.

Vorschlag:
erstelle eine eigene Klasse, die von AbstractTableModel (oder, falls du mehr Kontrolle willst, von TableModel) abgeleitet ist. Wenn sich etwas an der Tabelle ändern soll, fügst du zum deinem TableModel Werte hinzu oder entfernst sie.

Genaueres findest du beispielsweise hier: Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 16.18 Tabellen (JTable)
 

André Uhres

Top Contributor
Am besten wäre es, wenn man das jTable bei jedem Aufruf komplett neu initialisieren könnte.
Da die Daten jeweils komplett ersetzt werden, und das TableModel in deinem Fall eh nur ein Wrapper für die Datenliste ist, wäre es imho einfacher, wenn du jedesmal alles neu erzeugen würdest, also sowohl den JDialog als auch die JTable (und natürlich die neue JTable zum neuen JDialog hinzufügen!).
 

Dodo2110

Mitglied
Da die Daten jeweils komplett ersetzt werden, und das TableModel in deinem Fall eh nur ein Wrapper für die Datenliste ist, wäre es imho einfacher, wenn du jedesmal alles neu erzeugen würdest, also sowohl den JDialog als auch die JTable (und natürlich die neue JTable zum neuen JDialog hinzufügen!).


Ich dachte immer das geschieht mit jedem Aufruf des Dialoges, wg. new jDialog und new jTable.

Gruß,
Dodo
 

KrokoDiehl

Top Contributor
Da dein Tabellenmodell von
Code:
AbstractTableModel
erbt, wäre mein erster Versuch, dass du vor jedem anzeigen deines Dialog die Methode
Code:
fireTableDataChanged()
vom Modell aufrufst, á la:
Java:
 ((AbstractTableModel)myTable.getModel()).fireTableDataChanged();
 

Dodo2110

Mitglied
Da dein Tabellenmodell von AbstractTableModel erbt, wäre mein erster Versuch, dass du vor jedem anzeigen deines Dialog die Methode
fireTableDataChanged() vom Modell aufrufst

Hatte leider keinen Effekt.
.remove() funktioniert leider auch nicht, ebenso wie .repaint()

Ich habe im Tutorial etwas von einem "TableModelListener" gelesen, der die Beobachtung der Tabelleninhalte übernimmt. Allerdings ist die Beschreibung wenig aussagekräftig. Kann mir jemand Genaueres darüber erzählen?

Gruß
 

André Uhres

Top Contributor
Ich habe im Tutorial etwas von einem "TableModelListener" gelesen, der die Beobachtung der Tabelleninhalte übernimmt. Allerdings ist die Beschreibung wenig aussagekräftig. Kann mir jemand Genaueres darüber erzählen?
Java:
/*
A table model can have a set of listeners that are notified
whenever the table data changes.
Listeners are instances of TableModelListener.
In the following example code, SimpleTableDemo is extended
to include such a listener.

 */
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.table.*;

public class SimpleTableDemo extends JFrame implements TableModelListener {

    private final JButton btShow;
    private JTable jTableKundenÜbersicht;
    private KundenUebersicht kundenUebersicht;

    public SimpleTableDemo() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 300);
        setLocationRelativeTo(null);
        btShow = new JButton("Show");
        btShow.addActionListener(new ActionListener() {

            public void actionPerformed(final ActionEvent e) {
                JDialog dlg = new JDialog(SimpleTableDemo.this, "Test", true);
                getJTableKundenÜbersicht();
                dlg.add(new JScrollPane(jTableKundenÜbersicht));
                dlg.setSize(300, 200);
                dlg.setLocationRelativeTo(SimpleTableDemo.this);
                dlg.setVisible(true);
            }
        });
        add(btShow, BorderLayout.PAGE_START);
    }

    private JTable getJTableKundenÜbersicht() {
        kundenUebersicht = new KundenUebersicht();
        final List<List<String>> ausgabeKundUebers = kundenUebersicht.getAusgabeKundUebers();
        final List<String> columns = ausgabeKundUebers.get(0);
        ausgabeKundUebers.remove(0);
        TableModel jTableKundenÜbersichtModel = new AbstractTableModel() {

            @Override
            public String getColumnName(final int column) {
                return columns.get(column);
            }

            public int getRowCount() {
                return ausgabeKundUebers.size();
            }

            public int getColumnCount() {
                return columns.size();
            }

            public Object getValueAt(final int rowIndex, final int columnIndex) {
                return ausgabeKundUebers.get(rowIndex).get(columnIndex);
            }

            @Override
            public void setValueAt(final Object aValue, final int rowIndex, final int columnIndex) {
                ausgabeKundUebers.get(rowIndex).set(columnIndex, aValue.toString());
                fireTableCellUpdated(rowIndex, columnIndex);
            }

            @Override
            public boolean isCellEditable(final int rowIndex, final int columnIndex) {
                return columnIndex > 0;
            }
        };
        jTableKundenÜbersicht = new JTable();
        jTableKundenÜbersicht.setModel(jTableKundenÜbersichtModel);
        jTableKundenÜbersicht.setBorder(new LineBorder(new Color(0, 0, 0), 1, false));
        jTableKundenÜbersicht.getModel().addTableModelListener(this);
        return jTableKundenÜbersicht;
    }

    public void tableChanged(final TableModelEvent e) {
        int row = e.getFirstRow();
        int column = e.getColumn();
        TableModel model = (TableModel) e.getSource();
        String columnName = model.getColumnName(column);
        Object data = model.getValueAt(row, column);
        System.out.println(columnName + "=" + data);
    }

    public static void main(final String[] args) {
        Runnable gui = new Runnable() {

            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                new SimpleTableDemo().setVisible(true);
            }
        };
        //GUI must start on EventDispatchThread:
        SwingUtilities.invokeLater(gui);
    }
}

class KundenUebersicht {

    List<List<String>> AusgabeKundUebers = new ArrayList<List<String>>();
    private static boolean first;

    public KundenUebersicht() {
        first = !first;
        TestData rs = new TestData(first);
        List rowData = new ArrayList<String>();
        rowData.add("KundenNr");
        rowData.add("Name");
        rowData.add("Vorname");
        AusgabeKundUebers.add(rowData);
        while (rs.next()) {
            String lastKundennummer = rs.getString("Kundennummer");
            String lastName = rs.getString("Name");
            String lastVorname = rs.getString("Vorname");
            rowData = new ArrayList<String>();
            rowData.add(lastKundennummer);
            rowData.add(lastName);
            rowData.add(lastVorname);
            AusgabeKundUebers.add(rowData);
        }
    }

    public List<List<String>> getAusgabeKundUebers() {
        return AusgabeKundUebers;
    }
}

class TestData {

    private final List<Map> data;
    private Map<String, String> map;
    private final Iterator<Map> iterator;

    public TestData(final boolean first) {
        data = new ArrayList<Map>();
        if (first) {
            map = new HashMap<String, String>();
            map.put("Kundennummer", "001");
            map.put("Name", "Brice");
            map.put("Vorname", "Pierre");
            data.add(map);
        } else {
            map = new HashMap<String, String>();
            map.put("Kundennummer", "002");
            map.put("Name", "Delon");
            map.put("Vorname", "Alain");
            data.add(map);
        }
        iterator = data.iterator();
    }

    public boolean next() {
        if (iterator.hasNext()) {
            map = iterator.next();
            return true;
        }
        return false;
    }

    public String getString(final String string) {
        return map.get(string);
    }
}
 

sibianu

Mitglied
versuch mal nach dem Einfügen erstmal .revalidate() und evtl noch ein .repaint() hinterher. Bei mir funktioniert das.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H BufferedImage zurücksetzen funktioniert nicht AWT, Swing, JavaFX & SWT 12
Zeppi Swing Button soll Spiel zurücksetzen AWT, Swing, JavaFX & SWT 5
M Swing JTable zurücksetzen AWT, Swing, JavaFX & SWT 2
P Variablen in einem ActionListener zurücksetzen AWT, Swing, JavaFX & SWT 6
C JRadioButtons zurücksetzen AWT, Swing, JavaFX & SWT 7
C Swing Default Werte für JFormattedTextField und Eingaben zurücksetzen AWT, Swing, JavaFX & SWT 5
A SWT Table clearAll() und zurücksetzen. AWT, Swing, JavaFX & SWT 3
G Hintergrundfarbe eines JPanels zurücksetzen AWT, Swing, JavaFX & SWT 12
C Textfield Background auf Standard zurücksetzen AWT, Swing, JavaFX & SWT 2
A zurücksetzen Radiobutton AWT, Swing, JavaFX & SWT 3
D Zurücksetzen des Labels funtioniert nicht AWT, Swing, JavaFX & SWT 6
MiMa Optimieren einer Methode zum Zentrieren von Fenstern AWT, Swing, JavaFX & SWT 0
T VerifyListener - Ersetzen einer 0 AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
N Dropshadow setzen bei einer Gruppe von Tiles, die sich jeweils in einer Stackpane befinden, welche in einer Gridpane angeordnet sind. AWT, Swing, JavaFX & SWT 0
M Daten zufällig Einlesen aus einer Datei (binäres Format) AWT, Swing, JavaFX & SWT 7
ExceptionOfExpectation Mit einer laufenden GUI Applikation eine Datei in dem Rechner löschen AWT, Swing, JavaFX & SWT 2
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
Linjutsu Den Inhalten aus einer ArrayList Bilder zuweisen (Kartenspiel) AWT, Swing, JavaFX & SWT 8
H JavaFX Timeline II: Verschieben einer ImageView AWT, Swing, JavaFX & SWT 16
I Hilfe bei dem Erstellen einer SQL Abfrage aus gewählten JComboBoxen AWT, Swing, JavaFX & SWT 5
L Swing TextPanel Schrift untereinander und auf einer Höhe AWT, Swing, JavaFX & SWT 3
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
Ernesto95 JavaFX Return Value nach Beendigung einer Animation AWT, Swing, JavaFX & SWT 15
melaniemueller Wortliste in einer Datei ablegen AWT, Swing, JavaFX & SWT 12
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
Jose05 JavaFx Fxml: GUI aus einer anderen Klasse starten AWT, Swing, JavaFX & SWT 1
U Was genau ist das Objekt einer affinentransformation? AWT, Swing, JavaFX & SWT 1
B JavaFX Prüfen ob ein Objekt sich mehrmals in einer Liste befindet AWT, Swing, JavaFX & SWT 5
mac2010 JavaFX Einbindung einer Karte AWT, Swing, JavaFX & SWT 1
donnico2 Objekte in der GUI ausgeben mit Hilfe einer DAO AWT, Swing, JavaFX & SWT 1
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
W Aufrufen einer bestimmten Scene mit if-Bedingung AWT, Swing, JavaFX & SWT 4
J Ablaufsteuerung/Anleitung machen mit JDialog und einer Zustandsmaschine AWT, Swing, JavaFX & SWT 1
missy72 JavaFX Wiederholen einer IF-Abfrage beim erneuten Öffnen einer Stage AWT, Swing, JavaFX & SWT 11
missy72 JavaFX TableView / TableColumn / ObservableList / zwei Werte in einer Zelle AWT, Swing, JavaFX & SWT 2
S JavaFX - mit Listener Veränderungen in einer TableView abhören AWT, Swing, JavaFX & SWT 3
missy72 JavaFX ObservableList in einer ArrayList speichern. AWT, Swing, JavaFX & SWT 7
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
kodela Swing Element einer JComboBox ausgrauen AWT, Swing, JavaFX & SWT 3
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
N Einer TextArea ein ScrollPane hinzufügen AWT, Swing, JavaFX & SWT 8
L JavaFX Exception nach includieren einer fxml // nested controller AWT, Swing, JavaFX & SWT 1
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
G Verknüpfung einer pdf Datei AWT, Swing, JavaFX & SWT 2
B Ausgaben einer Umrechnung vom Textfeld in ein Label AWT, Swing, JavaFX & SWT 2
F jTree und das Model aus einer eigenen Klasse AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
N Wie kann ich zwei Grafiken in einer Oberfläche anzeigen lassen? AWT, Swing, JavaFX & SWT 8
@SupressWarnings() JavaFX Auf den Controller einer ListCell zugreifen AWT, Swing, JavaFX & SWT 4
Drachenbauer Swing Wie ändere ich den Hintergrund vom Anzeigefeld einer JComboBox, die nicht zum Hineinschreiben offen steht? AWT, Swing, JavaFX & SWT 32
H 3 verschiedene Nachrichten in einer FXML View die Infos kommen aus DB AWT, Swing, JavaFX & SWT 4
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
B Textfelder in einer ListView ausgeben AWT, Swing, JavaFX & SWT 13
J Searchfunktion auf einer MS Access Datenbank AWT, Swing, JavaFX & SWT 7
B Text im Tetfeld in einer TableView darstellen AWT, Swing, JavaFX & SWT 20
M Inhalte einer FlowPane AWT, Swing, JavaFX & SWT 4
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
FRI3ND JavaFX: Wie kann ich einer Scene Argumente übergeben? AWT, Swing, JavaFX & SWT 14
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
G JavaFX JavaFX-Dialog aus einer Nicht-JavaFX-Anwendung heraus AWT, Swing, JavaFX & SWT 1
1 Swing Progressbar benutzen um Fortschritt einer Methode anzuzeigen AWT, Swing, JavaFX & SWT 4
K JavaFX ViewTable mit einer LinkedList befüllen AWT, Swing, JavaFX & SWT 3
L CardLayout in einer Klasse? AWT, Swing, JavaFX & SWT 2
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
D Java FX Image in einer Webanwendung annotieren und den Bereich ausschneiden AWT, Swing, JavaFX & SWT 0
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing Ausführung einer SwingWorker Klasse stoppen AWT, Swing, JavaFX & SWT 4
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
xYurisha Aus einer Gui Buttons, Label und ProgessBars entfernen AWT, Swing, JavaFX & SWT 4
MiMa Selektion aus einer ListView AWT, Swing, JavaFX & SWT 5
J 2D-Grafik Background einer Jpanel Klasse ändern AWT, Swing, JavaFX & SWT 1
J JFram Location aus Konstruktor einer anderen Klasse auslesen AWT, Swing, JavaFX & SWT 10
L Methode zum Füllen einer ComboBox AWT, Swing, JavaFX & SWT 4
J Suche nach einer horizontal aufklappbaren Toolbar AWT, Swing, JavaFX & SWT 1
P Variable einer Eingabe in anderes Textfeld schreiben AWT, Swing, JavaFX & SWT 7
D JavaFX Einbinden einer .fxml AWT, Swing, JavaFX & SWT 1
B Zeile einer Tabelle selektieren AWT, Swing, JavaFX & SWT 1
A Prüfung einer Eingabe auf Gleitkommazahl AWT, Swing, JavaFX & SWT 5
J Suchmaschine einer Datenbank AWT, Swing, JavaFX & SWT 5
Kanda Sorata Inhalt einer .txt Datei einlesen und in ein Label einfügen (JavaFX) AWT, Swing, JavaFX & SWT 2
A Swing JLabels in einer ForEach Schleife an den JPanel anheften (UNO Netzwerkspiel) AWT, Swing, JavaFX & SWT 1
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
M Auswahl aus einer ListView AWT, Swing, JavaFX & SWT 3
J JavaFX - Felder (Label) in einer ForSchleife bearbeiten AWT, Swing, JavaFX & SWT 4
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
C JavaFX Tief setzen in der Überschrift einer Tabellenspalte AWT, Swing, JavaFX & SWT 3
D Swing Größe einer JComboBox im GridBagLayout aufgrund der maximalen Länge der enthaltenen Daten AWT, Swing, JavaFX & SWT 7
R Java FX - Fxml - relative Größenangaben für Breite und Höhe einer TextArea AWT, Swing, JavaFX & SWT 8
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
P Einer JList mit eigenem ListModel einen Eintrag hinzfügen AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben