Hallo zusammen
Ich bin Java-Anfänger und setze mich das erste Mal mit JTables auseinander.
Folgende Situation:
Ich habe eine ganz einfache View mit einem Button und einer JTable in einem JScrollPane.
Die Tabelle soll zwei Spalten "Name" und "Vorname" haben.
Mit einem Button-Klick möchte ich der JTable eine Row hinzufügen und den Vor- und Nachname einer Person (vorläufig noch hardcodiert) abspeichern können.
Das ganze möchte ich nach MVC aufbauen (das folgende Code-Beispiel ist nicht wirklich gut strukturiert und nur teilweise nach MVC aufgebaut -> nicht zu viel Code im Beitrag...).
Meine Frage: Wie muss ich das anstellen, dass beim Button-Klick eine neue Zeile eingefügt wird und die Informationen im einem Objekt der Klasse Person abgespeichert werden?
Könnt ihr mir sagen, was ich im Model noch implementieren/ändern muss, damit ich die Daten übergeben kann?
Irgendwie sehe ich nicht, wie ich dem Model sagen muss, dass sich die Datensätze für die JTable in der ArrayList befinden...
Habe schon einige Beiträge (u.a. diesen hier: JTable - Teil 2 - Wie kommen Daten in die Tabelle?) im Forum angeschaut, aber ich werde einfach nicht schlau daraus...
Wäre euch für die Hilfe sehr dankbar!
Hier der Code:
View.java
Model.java
Person.java
Ich bin Java-Anfänger und setze mich das erste Mal mit JTables auseinander.
Folgende Situation:
Ich habe eine ganz einfache View mit einem Button und einer JTable in einem JScrollPane.
Die Tabelle soll zwei Spalten "Name" und "Vorname" haben.
Mit einem Button-Klick möchte ich der JTable eine Row hinzufügen und den Vor- und Nachname einer Person (vorläufig noch hardcodiert) abspeichern können.
Das ganze möchte ich nach MVC aufbauen (das folgende Code-Beispiel ist nicht wirklich gut strukturiert und nur teilweise nach MVC aufgebaut -> nicht zu viel Code im Beitrag...).
Meine Frage: Wie muss ich das anstellen, dass beim Button-Klick eine neue Zeile eingefügt wird und die Informationen im einem Objekt der Klasse Person abgespeichert werden?
Könnt ihr mir sagen, was ich im Model noch implementieren/ändern muss, damit ich die Daten übergeben kann?
Irgendwie sehe ich nicht, wie ich dem Model sagen muss, dass sich die Datensätze für die JTable in der ArrayList befinden...
Habe schon einige Beiträge (u.a. diesen hier: JTable - Teil 2 - Wie kommen Daten in die Tabelle?) im Forum angeschaut, aber ich werde einfach nicht schlau daraus...
Wäre euch für die Hilfe sehr dankbar!
Hier der Code:
View.java
Code:
public class View extends JFrame {
View() {
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(300, 400);
setLayout(new BorderLayout());
JPanel pnl = new JPanel();
add(pnl, BorderLayout.CENTER);
Model mdl = new Model();
JTable tbl = new JTable(mdl);
JScrollPane scrollPane = new JScrollPane(tbl);
scrollPane.setPreferredSize(new Dimension(250, 300));
pnl.add(scrollPane);
JButton btn = new JButton("Person hinzu");
add(btn, BorderLayout.SOUTH);
btn.addActionListener(new ActionListener() {
public void actionPerformed (ActionEvent e) {
// hier möchte ich eine neue Zeile einfügen
// in die 1. Spalte käme der Name und in der
// 2. Spalte der Vorname der neuen Person.
//mdl.addRow(new Person("Test", "User"));
}
});
}
public static void main(String[] args) {
View view = new View();
view.setVisible(true);
}
}
Model.java
Code:
public class Model extends DefaultTableModel {
private String[] columnNames = {"Name", "Vorname"};
private ArrayList<Person> persons = new ArrayList<Person>();
Model() {
this.setColumnIdentifiers(columnNames);
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public Object getValueAt(int row, int col) {
Person p = persons.get(row);
switch (col) {
case 0:
return p.getName();
case 1:
return p.getVorname();
}
return 0;
}
}
Person.java
Code:
public class Person {
private String name = null;
private String vorname = null;
public Person(String name, String vorname) {
this.name = name;
this.vorname = vorname;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVorname() {
return vorname;
}
public void setVorname(String vorname) {
this.vorname = vorname;
}
}