Swing Werte des JTable werden nicht angezeigt

jav123

Mitglied
Guten Tag. Ich habe das Problem, dass mein JTable keine Werte anzeigt. Es werden zwar die Überschriften und die Tabelle angezeigt, jedoch keine Werte. Mein Projekt sieht so aus: Ich versuche eine Skispringer Simulation zu erstellen. Zuerst werden die Skispringer (als Attribute nachname: String, punkte: int) erstellt und in einer Liste gespeichert. Anschließend werden die Elemente der Liste in einer Methode die in der Klasse Verwaltung implementiert ist, dem DefaultTableModel hinzugefügt. Jedoch werden die Werte beim aufrufen der Methode nicht angezeigt.
[CODE lang="java" title="Methode zum Umwandeln der Listen Werte in eine DefaultTableModel"]public void teilnehmerListeInTableModel() {
int d = 0;
teilnehmer.toFirst();
while(teilnehmer.hasAccess()) {
d++;
teilnehmer.next();
}
String[] nachnamen = new String[d];
String[] punkte = new String[d];
int z = 0;
teilnehmer.toFirst();
while(teilnehmer.hasAccess()) {
nachnamen[z] = teilnehmer.getContent().getNachname();
punkte[z] = String.valueOf(teilnehmer.getContent().getPunkte());
z++;
teilnehmer.next();
}
anzeigeModel.addColumn("Nachname", nachnamen);
anzeigeModel.addColumn("Punkte", punkte);
}[/CODE]
Die Klasse ListeAnzeigenGui soll die Tabelle jetzt anzeigen:
Java:
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.awt.event.ActionEvent;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class ListeAnzeigenGui extends JFrame {

    private JPanel contentPane;
    
    private Verwaltung v3;
    //private JList<String> jlTeilnehmer;
    private JTable jTable2;
    
    //private String column[];
    
    //protected DefaultListModel<Skispringer> anzeigeModel;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ListeAnzeigenGui frame = new ListeAnzeigenGui();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ListeAnzeigenGui() {
        
        //anzeigeModel = new DefaultListModel<Skispringer>();
        
        v3 = new Verwaltung();
        //v3.teilnehmerListeInListModel();
        v3.listeZu2DArray();
        //column = new String[2];
        //column[0] = "Nachname";
        //column[1] = "Punkte";
        v3.teilnehmerListeInTableModel();
        
        //jlTeilnehmer = null;
        
        setTitle("Lassen Sie sich ihre Liste anzeigen");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        JLabel lblU1 = new JLabel("Ihre Liste");
        lblU1.setBounds(178, 11, 83, 14);
        contentPane.add(lblU1);
        
        JButton btnOK = new JButton("OK");
        btnOK.setBounds(335, 227, 89, 23);
        btnOK.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Durchgang1 d1 = new Durchgang1();
                d1.setVisible(true);
                dispose();
            }
        });
        contentPane.add(btnOK);
        
        JScrollPane scrollPane1 = new JScrollPane();
        scrollPane1.setBounds(22, 52, 371, 164);
        contentPane.add(scrollPane1);
        
        jTable2 = new JTable(v3.anzeigeModel);
        scrollPane1.setViewportView(jTable2);
    }
}
Die Liste die ich erzeuge erhält auch Werte, das habe ich bereits überprüft.
Ich bedanke mich im voraus für Lösungsansätze.
Die Dokumentation der Klasse List, die ich verwende:
 

Anhänge

  • Dokumentation Klasse List.pdf
    354,2 KB · Aufrufe: 3

jav123

Mitglied
So, das Problem habe ich selber gelöst. Jetzt ist leider ein weiteres aufgetreten. Ich habe jetzt die JTable erzeugt und mit Startwerten bestückt diese werden auch angezeigt. Das Problem ist ich möchte die Daten in der JTable verändern, bei einem Methodenaufruf verändern.
Java:
public void teilnehmerListeInTableModel() {
        int d = 0;
        teilnehmer.toFirst();
        while(teilnehmer.hasAccess()) {
            d++;
            teilnehmer.next();
        }
        String[] nachnamen = new String[d];
        String[] punkte = new String[d];
        int z = 0;
        teilnehmer.toFirst();
        while(teilnehmer.hasAccess()) {
            nachnamen[z] = teilnehmer.getContent().getNachname();
            punkte[z] = String.valueOf(teilnehmer.getContent().getPunkte());
            z++;
            teilnehmer.next();
        }
        anzeigeModel.addColumn("Nachname", nachnamen);
        anzeigeModel.addColumn("Punkte", punkte);
    }
Die Methode ist immer noch die gleiche wie vorher. Die Liste enthält auch Daten. Nur wie erneure ich jetzt den Inhalt in meinem JTable mit den neuen Daten, so dass die Startwerte mit den neuen überschrieben werden?
 

jav123

Mitglied
Hallo,
ich habe zuerst meine Startwerte das TableModel erzeugt. Anschließend möchte ich sie mit einer Methode überschrieben habe mir aus der Dokumentation die Methode fireTableDataChanged rausgesucht. Der Inhalt ändert sich leider nicht es werden lediglich zwei neue leere Spalten an die Tabelle angehängt.
Java:
public void arrayInTableModel() {
        anzeigeModel.addColumn("Nachnamen", namen);
        anzeigeModel.addColumn("Punkte", punkte);
        anzeigeModel.fireTableDataChanged();
    }
Das ist die Methode die den Inhalt ändern soll die Array haben auch einen Inhalt.
 

Anhänge

  • Screenshot (10).png
    Screenshot (10).png
    7,1 KB · Aufrufe: 21

jav123

Mitglied
So ich habe es jetzt auch mal versucht indem ich einfach ein neues DefaultTableModel erzeugt und auf Knopfdruck es dem JTable übergebe. Jedoch zeigt er bei dem neuen DefaultTableModel nur die Überschrift an. Die Werte aus den Array (namen, punkte) werden nicht angezeigt. Ich habe es aber schon mehrmals überprüft die beiden Array haben einen Inhalt.
 
K

kneitzel

Gast
Also ich habe Probleme, da etwas nachzuvollziehen, was Du genau machen willst und wie Du dahin kommen möchtest.

Generell würde ich so eine Tabelle immer wie folgt aufbauen:

a) Die Daten, die angezeigt werden, werden irgendwo sinnvoll gespeichert. Wenn Du eine Liste von Teilnehmern anzeigen willst, dann ist das halt ein einfaches
Java:
List<Teilnehmer> teilnehmerList = new ArrayList<>();

b) Dann brauchst Du für den Inhalt der Tabelle aber eine ObvervableList, daher gibt es nun ein:
Java:
ObservableList<Teilnehmer> content = FXCollections.observableList(teilnehmerList );

c) Dann hast Du Tabelle / Tabellen-Spalten. Ich arbeite da immer mit fxml, aber das könnte sowas sein:
Java:
    @FXML private TableView<Teilnehmer> teilnehmerTable;
    @FXML private TableColumn<Teilnehmer, String> teilnehmerNachnameColumn;
    @FXML private TableColumn<Teilnehmer, String> teilnehmerPunkteColumn;

Damit haben wir nun eine TableView, die Teilnehmer anzeigen soll und TableColumns, die darauf zugreifen ... Nun müss aber noch klar gesagt werden, was jeweils angezeigt werden soll:
Java:
    @FXML
    public void initialize() {
        teilnehmerNachnameColumn.setCellValueFactory(new PropertyValueFactory<>("nachname"));
        teilnehmerPunkteColumn.setCellValueFactory(new PropertyValueFactory<>("punkte"));
        teilnehmerTable.setItems(content);
    }
Damit ist dann klar, welche Property jeweils angezeigt werden soll und auch die Tabelle hat die ObservableList bekommen.

Nun kannst Du die Liste der Teilnehmer beliebig verändern. Die Tabelle zeigt die Änderung an. Damit diese neu dargestellt wird, aber ein teilnehmerTable.refresh() mit aufnehmen.

Das führt dann zu einer sauberen Anzeige der Daten...
 

jav123

Mitglied
Also ich habe Probleme, da etwas nachzuvollziehen, was Du genau machen willst und wie Du dahin kommen möchtest.

Generell würde ich so eine Tabelle immer wie folgt aufbauen:

a) Die Daten, die angezeigt werden, werden irgendwo sinnvoll gespeichert. Wenn Du eine Liste von Teilnehmern anzeigen willst, dann ist das halt ein einfaches
Java:
List<Teilnehmer> teilnehmerList = new ArrayList<>();

b) Dann brauchst Du für den Inhalt der Tabelle aber eine ObvervableList, daher gibt es nun ein:
Java:
ObservableList<Teilnehmer> content = FXCollections.observableList(teilnehmerList );

c) Dann hast Du Tabelle / Tabellen-Spalten. Ich arbeite da immer mit fxml, aber das könnte sowas sein:
Java:
    @FXML private TableView<Teilnehmer> teilnehmerTable;
    @FXML private TableColumn<Teilnehmer, String> teilnehmerNachnameColumn;
    @FXML private TableColumn<Teilnehmer, String> teilnehmerPunkteColumn;

Damit haben wir nun eine TableView, die Teilnehmer anzeigen soll und TableColumns, die darauf zugreifen ... Nun müss aber noch klar gesagt werden, was jeweils angezeigt werden soll:
Java:
    @FXML
    public void initialize() {
        teilnehmerNachnameColumn.setCellValueFactory(new PropertyValueFactory<>("nachname"));
        teilnehmerPunkteColumn.setCellValueFactory(new PropertyValueFactory<>("punkte"));
        teilnehmerTable.setItems(content);
    }
Damit ist dann klar, welche Property jeweils angezeigt werden soll und auch die Tabelle hat die ObservableList bekommen.

Nun kannst Du die Liste der Teilnehmer beliebig verändern. Die Tabelle zeigt die Änderung an. Damit diese neu dargestellt wird, aber ein teilnehmerTable.refresh() mit aufnehmen.

Das führt dann zu einer sauberen Anzeige der Daten...
Erstmal danke für die Antwort. Leider hat das mein Problem nicht gelöst. Mein Projekt besteht darin: ich möchte ein Skispringen simulieren. Dafür habe ich einmal die Klasse Skispringer (Attribute: name-String und punkte-int) und eine Verwaltungsklasse die die Teilnehmerliste enthält usw. . Wenn man das Programm startet, öffnet sich ein JFrame, was als Startbildschirm gedacht ist. Wenn man auf Starten drückt kommt man zu dem Frame wo man die Teilnehmer erstellen kann. Entweder erstellt man die Teilnehmer automatisch oder man erstellt sie manuell. Wenn man dann Teilnehmer erstellt hat und auf "weiter" drückt, kommt man auf den nächsten Frame, wo ich die Teilnehmer in einem JTable darstellen möchte. Und hier tritt dann mein Problem auf. Die Teilnehmer werden nicht angezeigt. Ich verwalte die Einträge des JTable in einem DefaultTableModel. In dem DefaultTableModel sind beim Programmstart noch Defaultwerte enthalten:
[CODE lang="java" title="Defaultwerte im DefaultTableModel"] nachnamen1 = new String[2];
punkte1 = new String[2];

nachnamen1[0] = "n1";
nachnamen1[1] = "n2";
punkte1[0] = "p1";
punkte1[1] = "p2";

anzeigeModel.addColumn("Nachnamen", nachnamen1);
anzeigeModel.addColumn("Punkte", punkte1);[/CODE]
Nach dem ich die Teilnehmer nun erstellt habe, wandel ich die Einträge der Liste in ein Array um. Danach möchte ich die Enträge des DefaultTableModel erneuern mit der Methode:
Java:
public void arrayInTableModel() {
        anzeigeModel.addColumn("Nachnamen", namen);
        anzeigeModel.addColumn("Punkte", punkte);
        anzeigeModel.fireTableStructureChanged();
    }
Dies passiert aber nicht es wird lediglich zwei neue Spalten an die Table angehangen mit den Überschriften aber ohne Daten. Die Defaultwerte werden mir aber angezeigt. Und die Arrays "namen" und "punkte" haben auch einen Inhalt das habe ich überprüft indem ich sie mir, bei dem Frame wo ich die Teilnehmer erstelle ausgeben. Wenn ich die Arrays aber zum prüfen auf dem Frame ausgeben möchte wo die Tabelle drauf ist, gibt er die Arrays nicht mehr aus. Das ist komisch. Einen Frame vorher hatten sie doch noch einen Inhalt. Die Tabelle wird ja auch erzeugt, nur ohne Inhalt. Ich weiß langsam auch nicht mehr was ich noch ausprobieren soll.
 

dress19

Mitglied
Was ist so schwer daran, ein vernünftiges TableModel zu definieren, die Dimensionen der Table vorher festzulegen und bei Änderungen .fireTableDataChanged(); aufzurufen? ...
 

jav123

Mitglied
So das Problem ist gelöst. Ich habe es lag nicht an dem JTable sondern daran, dass ich mehrere Instanzen des selben Typs erstellt habe, aber den Inhalt der Liste nicht weiter gegeben habe.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JTable Werte werden nicht übernommen AWT, Swing, JavaFX & SWT 2
P Swing JTable Werte auslesen bzw überschreiben AWT, Swing, JavaFX & SWT 5
L JTable Werte mulitiplizieren AWT, Swing, JavaFX & SWT 3
S JTable - 2D ArrayList & Falsche Werte. AWT, Swing, JavaFX & SWT 3
K JTable Werte auslesen AWT, Swing, JavaFX & SWT 2
D Swing JTable Werte AWT, Swing, JavaFX & SWT 2
E Jtable Werte ohne Enter übernehmen AWT, Swing, JavaFX & SWT 9
M Comboboxen in JTable - Werte auslesen AWT, Swing, JavaFX & SWT 9
calzone Swing JTable, Werte aktualisieren klappt nicht! AWT, Swing, JavaFX & SWT 7
R Swing JTable, werte speichern und laden AWT, Swing, JavaFX & SWT 25
G Alle Werte einer Spalte in JTable zusammenrechnen AWT, Swing, JavaFX & SWT 2
G eingegebene Werte einer JTable prüfen? Bitte helfen AWT, Swing, JavaFX & SWT 5
T Werte aus JTable auslesen AWT, Swing, JavaFX & SWT 10
C JFreeChart X-Achse Werte skalieren, begrenzen, zoomen AWT, Swing, JavaFX & SWT 5
D ObservableList Werte hinzufügen AWT, Swing, JavaFX & SWT 7
missy72 JavaFX TableView / TableColumn / ObservableList / zwei Werte in einer Zelle AWT, Swing, JavaFX & SWT 2
P Adressbuch Werte speichern AWT, Swing, JavaFX & SWT 21
Blender3D Falsche Werte mit Java Toolkit Screensize AWT, Swing, JavaFX & SWT 4
B JavaFX JavaFX TableView PropertyValueFactory für Werte aus HashMap AWT, Swing, JavaFX & SWT 2
F RGB-Werte aus einem String einlesen AWT, Swing, JavaFX & SWT 26
emma_louisa JavaFX Werte beim Aufrufen des Fensters übernehmen (SceneBuilder) AWT, Swing, JavaFX & SWT 3
Arif Swing MouseMotionListener liefert falsche Werte ? AWT, Swing, JavaFX & SWT 7
G Werte aus dem GUI Auslesen AWT, Swing, JavaFX & SWT 8
N Swing JFormattedTextField keine Werte nach Formatzuweisung AWT, Swing, JavaFX & SWT 0
B JavaFX Werte aus eingefügtem Window lesen AWT, Swing, JavaFX & SWT 0
Augenblau JavaFX Wechselnde Werte in Label darstellen AWT, Swing, JavaFX & SWT 7
M Swing JFreechart zoom x-achse neue Werte AWT, Swing, JavaFX & SWT 4
R AWT Werte aus NumberField vergleichen AWT, Swing, JavaFX & SWT 9
H org.eclipse.swt.widgets.Slider und negative Werte AWT, Swing, JavaFX & SWT 3
S ComboBox-Werte aus einem Array an Textfields übergeben AWT, Swing, JavaFX & SWT 3
N Input/Output Stream werte in Label anzeigen. AWT, Swing, JavaFX & SWT 6
F JavaFX Properties und NULL Werte AWT, Swing, JavaFX & SWT 2
A JFreeChart BarChart invertierte anzeige oder werte bereich von-bis AWT, Swing, JavaFX & SWT 4
A Swing Bestimmte Werte anzeigen JSlider() AWT, Swing, JavaFX & SWT 2
T label überschriebt seine werte-SWT AWT, Swing, JavaFX & SWT 3
E werte zurück in GUI schreiben AWT, Swing, JavaFX & SWT 4
E werte aus List auslesen AWT, Swing, JavaFX & SWT 2
C Swing Default Werte für JFormattedTextField und Eingaben zurücksetzen AWT, Swing, JavaFX & SWT 5
E Listener, werte in andere Klasse übernehmen AWT, Swing, JavaFX & SWT 11
K JComboBox: Beim Einfügen neuer Werte ItemStateChanged blocken. AWT, Swing, JavaFX & SWT 2
Z Swing Mittels GUI Werte aus Property-File ändern AWT, Swing, JavaFX & SWT 5
S Swing Werte einer Jcheckbox aus eine Klasse A in eine Klasse B aufrufen AWT, Swing, JavaFX & SWT 6
P 2D-Grafik PaintComponent() übernimmt keine Werte aus update() AWT, Swing, JavaFX & SWT 8
B Die Werte von getLocation() im Label anzeigen AWT, Swing, JavaFX & SWT 4
J Swing jSlider nur auf bestimmte werte beschränken AWT, Swing, JavaFX & SWT 15
J JDialog verliert Werte AWT, Swing, JavaFX & SWT 3
T JTextField nur Double werte eingeben AWT, Swing, JavaFX & SWT 2
J Werte aus Combobox speichern AWT, Swing, JavaFX & SWT 3
F Swing JList doppelte werte AWT, Swing, JavaFX & SWT 3
A Swing JFrame Werte aus JDialog übergeben AWT, Swing, JavaFX & SWT 4
F JComboBox gibt falsche werte AWT, Swing, JavaFX & SWT 3
P getMousePosition(): andere Werte als erwartet AWT, Swing, JavaFX & SWT 4
D Comboboxen werte Falsch. AWT, Swing, JavaFX & SWT 2
A TableRowSorter für double Werte mit Formatierung AWT, Swing, JavaFX & SWT 3
C Werte aus der Tabelle lesen AWT, Swing, JavaFX & SWT 4
K JSpinner - Model <-> View, unterschiedliche Werte AWT, Swing, JavaFX & SWT 9
A Werte in ein Textfeld übernehmen AWT, Swing, JavaFX & SWT 4
L JTextField Umwandeln in double-Werte AWT, Swing, JavaFX & SWT 5
P Bei Buttons Werte übergeben AWT, Swing, JavaFX & SWT 2
G Werte in Koordinatensystem zeichnen AWT, Swing, JavaFX & SWT 11
G ComboBox Werte auslesen uns setzen AWT, Swing, JavaFX & SWT 6
M JFormattedTextField und Null-Werte AWT, Swing, JavaFX & SWT 4
loadbrain auslesen der Werte dynamischer Textfields AWT, Swing, JavaFX & SWT 21
T JTextField, der nur Werte zwischen 100 und 1000 zulässt AWT, Swing, JavaFX & SWT 28
M Ich habe Werte und Brauche Grafik! AWT, Swing, JavaFX & SWT 3
P Double-Werte sortieren mit TableRowSorter AWT, Swing, JavaFX & SWT 2
L Farbregler - Werte als Zahl ausgeben - Color AWT, Swing, JavaFX & SWT 5
K JTree: Werte in Blätter speichern? AWT, Swing, JavaFX & SWT 8
K JSpinner Werte verschwinden bei Panel Wechsel AWT, Swing, JavaFX & SWT 2
raptorrs J2D paintComponent: Nur ganzzahlige (-int) Werte möglich? AWT, Swing, JavaFX & SWT 3
P JDialog Werte auslesen AWT, Swing, JavaFX & SWT 2
V Werte mehreren Checkboxes zuweisen AWT, Swing, JavaFX & SWT 3
V Werte aus TextField in eine andere Klasse? AWT, Swing, JavaFX & SWT 2
B Eingabefelder nur für bestimmte Werte AWT, Swing, JavaFX & SWT 8
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben