JTable und tablemodel Verständnisproblem

Eule

Mitglied
Hallo Forum

Angenommmen ich habe eine Klasse die alle Informationen zu einer Person speichert. Beispielhaft hat sie folgende Attribute:

Code:
public class Person {
    private int personID;
    private String vName;
    private String nName;
    private String telNumber;
    private String strasse;
    private int alter;
}

Weiter habe ich eine Klasse die Personen alle in einem Vector sammelt, da zur Laufzeit welche hinzugefügt oder gelöscht werden müssen:
Code:
public class PersonenSammler {
	Vector<Person> personenVector;
}

Jetzt habe ich das Problem, wie ich nur bestimmte Attribute in einem JTable anzeigen lassen kann, so dass ich aber trotzdem weiter weiß, wo was angezeigt wird. Als Beispeil: lasse ich 3 Personen anzeigen. Ich füge sie in der Reihenfolge hinzu wie sie in dem Vector stehen. Die ID möchte ich nicht anzeigen lassen. Wie weiß ich nun zur Laufzeit, wenn ich eine Zeile markiere, wo die passenden Daten im Vector liegen? Und wie kann ich z.B. den Namen in der Tabelle ändern, wenn die Daten in dem Vector extern manipuliert werden? Also nicht über die Tabelle. Dann müsste der Vector irgendwie wissen, in welcher Zeile die Daten stehen.

Das Hauptproblem besteht nun darin, dass ich einen Autorowsorter gesetzt habe und jetzt nicht mehr weiß, wo welche Zeile steht. Er schreibt es auf jeden Fall in die falsche Zeile.

Ich habe auch schon mit convertModelToTable (oder wie das heißt) probiert, aber bringt auch falsche Ergebnisse.

Kann mir Jemand ein grundlegendes Konzept beschreiben, wie man sowas in Java löst? Ich habe das in c++ mit Qt gemacht und dort speichert man sich einfach die Zeiger der einzelnen Spalten.

Gruß, Eule

P.s: Der Originalquellcode hat leider über 10000 Zeilen, so das ich ihn nicht so vereinfacht hier schreiben kann, das er übersichtlich bleibt. Ich hoffe dass das Problem trotzdem klar geworden ist.
 

Onkel Hatti

Bekanntes Mitglied
Deine Klasse Person ist so bestimmt nicht vollständig, da die Variablen alle als private deklariert sind. Hier muss also sowieso noch Anwendungslogik rein. Ich tät sie in so einm Fall von Vector ableiten und den personenVector mit den Personen füllen.
Damit hat man einen Vector der Spalten in einem Vector der Zeilen, also quasi einen Vector<Vector<Object>>und kann ihn über z.B. das DefaultTableModel per .setDataVector(personenVector, colIdentVector) dem JTable zufügen.
Die Zeilen stehen da, wo sie im Vector stehen. Wenn sie sortiert sind, dann muss die richtige Zeile über jTable.convertRowIndexToView(), bzw. die Spalte über JTable.convertModelIndexToView() gemappt werden.

Der gerade im JTable angezeigte dataVector lässt sich über das DefaultTableModel.getDataVector() auslesen.

Hatti
 

Marco13

Top Contributor

André Uhres

Top Contributor
Angenommmen ich habe eine Klasse die alle Informationen zu einer Person speichert.
Jetzt habe ich das Problem, wie ich nur bestimmte Attribute in einem JTable anzeigen lassen kann, so dass ich aber trotzdem weiter weiß, wo was angezeigt wird.
Das Hauptproblem besteht nun darin, dass ich einen Autorowsorter gesetzt habe und jetzt nicht mehr weiß, wo welche Zeile steht.
Hier ein funktionierendes Beispiel.
ANMERKUNG: Folgende drei Klassen werden benötigt um dieses Beispiel auszuführen:
http://www.camick.com/java/source/BeanTableModel.java
http://www.camick.com/java/source/RXTable.java
http://www.camick.com/java/source/RowTableModel.java

Mehr Info: Bean Table Model Java Tips Weblog

Java:
/*
NOTE: The following three classes are needed to run this sample code:

[url]http://www.camick.com/java/source/BeanTableModel.java[/url]
[url]http://www.camick.com/java/source/RXTable.java[/url]
[url]http://www.camick.com/java/source/RowTableModel.java[/url]

More information: [url=http://tips4java.wordpress.com/2008/11/27/bean-table-model/]Bean Table Model  Java Tips Weblog[/url]
*/
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import utils.BeanTableModel;
import utils.RXTable;
public class PersonsTableDemo extends JFrame {
    private JButton btModify, btAdd, btRemove;
    private JToolBar tools;
    private final RXTable table;
    private final BeanTableModel model;
    private final Random r = new Random();
    public PersonsTableDemo() {
        setSize(400, 300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        tools = new JToolBar();
        btModify = new JButton("Modify Age");
        btModify.setFocusable(false);
        btModify.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                btActionPerformed(evt);
            }
        });
        tools.add(btModify);
        btAdd = new JButton("Add Person");
        btAdd.setFocusable(false);
        btAdd.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                btActionPerformed(evt);
            }
        });
        tools.add(btAdd);
        btRemove = new JButton("Remove Person");
        btRemove.setFocusable(false);
        btRemove.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                btActionPerformed(evt);
            }
        });
        tools.add(btRemove);
        getContentPane().add(tools, BorderLayout.PAGE_START);
        model = new BeanTableModel(Person.class);
        model.addRow(new Person(1, "Andre", "Uhres", "123", "Zeltstr.1", 57));
        model.addRow(new Person(2, "Georg", "Uhres", "123", "Zeltstr.1", 12));
        model.addRow(new Person(2, "Lydia", "Uhres", "123", "Zeltstr.1", 15));
        table = new RXTable(model);
        table.getColumnModel().removeColumn(table.getColumn("Person Id"));
        RXTable.reorderColumns(table, "Vor Name", "Nach Name", "Tel Number",
                "Strasse", "Alter");
        table.getColumnModel().getColumn(0).setHeaderValue("Vorname");
        table.getColumnModel().getColumn(1).setHeaderValue("Nachname");
        table.getColumnModel().getColumn(2).setHeaderValue("Telefon");
        table.getColumnModel().getColumn(3).setHeaderValue("Adresse");
        table.setAutoCreateRowSorter(true);
        add(new JScrollPane(table));
    }
    private void btActionPerformed(final ActionEvent evt) {
        Object source = evt.getSource();
        if (source == btModify) {
            int[] selectedRows = table.getSelectedRows();
            if (selectedRows.length == 0) {
                JOptionPane.showMessageDialog(this, "Please select a row");
                return;
            }
            for (int selectedRow : selectedRows) {
                int selectedRowInModel = table.convertRowIndexToModel(selectedRow);
                Person person = (Person) model.getRow(selectedRowInModel);
                person.setAlter(r.nextInt(60));
                System.out.println(person);
            }
            table.repaint();
        }
        if (source == btAdd) {
            Person person = new Person();
            model.addRow(person);
        }
        if (source == btRemove) {
            int[] selectedRows = table.getSelectedRows();
            if (selectedRows.length == 0) {
                JOptionPane.showMessageDialog(this, "Please select a row");
                return;
            }
            if (selectedRows.length == 1) {
                int selectedRowInModel = table.convertRowIndexToModel(selectedRows[0]);
                model.removeRows(selectedRowInModel);
            } else {
                JOptionPane.showMessageDialog(this, "Please select a single row");
                return;

            }
        }
    }
    public static void main(final String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new PersonsTableDemo().setVisible(true);
            }
        });
    }
}
Java:
public class Person {
    private int personId;
    private String vorName;
    private String nachName;
    private String telNumber;
    private String strasse;
    private int alter;
    public Person() {
        this(0, "", "", "", "", 0);
    }
    public Person(final int personId, final String vorName, final String nachName,
            final String telNumber, final String strasse, final int alter) {
        this.personId = personId;
        this.vorName = vorName;
        this.nachName = nachName;
        this.telNumber = telNumber;
        this.strasse = strasse;
        this.alter = alter;
    }
    public int getAlter() {
        return alter;
    }
    public void setAlter(final int alter) {
        this.alter = alter;
    }
    public String getNachName() {
        return nachName;
    }
    public void setNachName(final String nachName) {
        this.nachName = nachName;
    }
    public int getPersonId() {
        return personId;
    }
    public void setPersonId(final int personId) {
        this.personId = personId;
    }
    public String getStrasse() {
        return strasse;
    }
    public void setStrasse(final String strasse) {
        this.strasse = strasse;
    }
    public String getTelNumber() {
        return telNumber;
    }
    public void setTelNumber(final String telNumber) {
        this.telNumber = telNumber;
    }
    public String getVorName() {
        return vorName;
    }
    public void setVorName(final String vorName) {
        this.vorName = vorName;
    }
    @Override
    public String toString() {
        return "Id:" + personId + "  " + vorName +
                " " + nachName + "  " + alter + " Jahre";
    }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
W Neues TableModel und JTable wird nicht refreshed AWT, Swing, JavaFX & SWT 3
D Swing JTable TableModel + RowCount AWT, Swing, JavaFX & SWT 18
N Swing Eintrag in JTable an dessen TableModel weiterreichen AWT, Swing, JavaFX & SWT 3
K JTable +TableModel --> Anpassung der Tabellengröße (Zeilenanzahl) AWT, Swing, JavaFX & SWT 3
L Klick auf JTable -> EditorPane manipulieren, Fragen zu TableModel AWT, Swing, JavaFX & SWT 9
R JTable - TableModel AWT, Swing, JavaFX & SWT 6
D JTable - TableColumnModel - TableModel AWT, Swing, JavaFX & SWT 3
S JTable nimmt TableModel nicht an AWT, Swing, JavaFX & SWT 4
G JTable - TableModel aus ArrayList AWT, Swing, JavaFX & SWT 8
A JTable, eigenes TableModel und dessen Objekte AWT, Swing, JavaFX & SWT 4
G Frage zu JTable und TableModel AWT, Swing, JavaFX & SWT 4
G JTable, TableModel und CellRenderer AWT, Swing, JavaFX & SWT 3
G jTable + ScrollPane (+ TableModel) AWT, Swing, JavaFX & SWT 7
G TableModel von JTable wieder entfernen AWT, Swing, JavaFX & SWT 10
P JTable TableModel JFreeReport AWT, Swing, JavaFX & SWT 4
T anlegen einer jTable mit TableModel AWT, Swing, JavaFX & SWT 3
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
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
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
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
B Swing JTable sortieren AWT, Swing, JavaFX & SWT 2
T Swing JTable auslesen und befüllen AWT, Swing, JavaFX & SWT 8
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
J JTable und Suchlogik AWT, Swing, JavaFX & SWT 4
Viktim Swing JTable mit Tab verlassen AWT, Swing, JavaFX & SWT 1
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
Thallius Warum refrehsed mein JTable nicht? AWT, Swing, JavaFX & SWT 5
Ghostman1711 Hinzufügen ausgewählter Dateinen des Filechoosers zu einem JTable AWT, Swing, JavaFX & SWT 9
S Swing JTable - Einzelne Rows einfärben AWT, Swing, JavaFX & SWT 11
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
K JTable getValueAt() klappt nicht immer AWT, Swing, JavaFX & SWT 1
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
P JTable - bei Eingabe Selektion AWT, Swing, JavaFX & SWT 0
P Fokus auf Zelle in JTable AWT, Swing, JavaFX & SWT 1
S Swing Deselektion in JTable verhindern AWT, Swing, JavaFX & SWT 0
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
N Swing Print JTable mit AbstractTableModel AWT, Swing, JavaFX & SWT 1
Ananaskirsche Swing jTable Reihen zuviel eingefügt AWT, Swing, JavaFX & SWT 12
P im JTable die Schriftfarbe ändern AWT, Swing, JavaFX & SWT 19
T Swing JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
S Dreiecke in bestimmte Zellen einer JTable AWT, Swing, JavaFX & SWT 9
LexeB4F Zelle in JTable gezielt einfärben AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben