Announcement

Collapse
No announcement yet.

jTable automatisch aus einer Klasse erstellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • jTable automatisch aus einer Klasse erstellen

    Hallo.

    Ich habe folgende Klasse in meinem Projekt:

    public class KundenClass {
    Integer ID;
    Integer Nummer;
    String Name;
    String Vorname;

    public KundenClass() {

    }

    public KundenClass(Integer _ID, Integer _Nummer, String _Name, String _Vorname) {
    this.ID = _ID;
    this.Nummer = _Nummer;
    this.Name = _Name;
    this.Vorname = _Vorname;
    }
    }

    Und in meinem Design habe ich einen jTable. Diesen habe ich manuell im Designer mit Coloumns "ID", "Nummer", "Name", "Vorname" "gefüllt. Die Daten hole ich mir dann aus einer Datenbank. Soweit so gut, dass läuft.

    Aber wenn ich nun meine Klasse zum Beispiel um die Felder "PLZ" und "Ort" erweitere muss ich das ja manuell im Designer "nacharbeiten". Gibt es eine Möglichkeit die Coloumns automatisch aus der Klasse auszulesen und dann zu generieren?

    Gruß
    Jan

  • #2
    Ja, in dem du das DefaultTableModel selbst erzeugst und der Tabelle zuordnest
    Die Columns und die canEdit Eigenschaft werden hier als Array oder List übergeben
    Code:
    public class TableTreeTableModel extends DefaultTableModel
    {
    protected final Class<?>[] types;
    protected final boolean[] canEdit;
    
    public TableTreeTableModel(Object[] columnNames,Class<?>[] tableTyps,boolean[] canEdit)
        {
        super(columnNames,0);
        this.types=tableTyps;
        this.canEdit=canEdit;
        }
    
    public TableTreeTableModel(List<TableTreeTableModelColumn> list)
        {
        types=new Class<?>[list.size()];
        canEdit=new boolean[list.size()];
        setColumnCount(0);
        for(int i=0;i<list.size();i++)
        {
        addColumn(list.get(i).getColumnName());
        types[i]=list.get(i).getTableTyp();
        canEdit[i]=list.get(i).isCanEdit();
        }
        }
    
    @Override
    public Class<?> getColumnClass(int columnIndex)
        {
        return types[columnIndex];
        }
    
    @Override
    public boolean isCellEditable(int rowIndex,int columnIndex)
        {
        return canEdit[columnIndex];
        }
    
    }
    Die Column wird so definiert

    Code:
    public class TableTreeTableModelColumn
    {
    private final Object columnName;
    private final Class<?> tableTyp;
    private final boolean canEdit;
    
    public TableTreeTableModelColumn(Object columnName,Class<?> tableTyp,boolean canEdit)
        {
        this.columnName=columnName;
        this.tableTyp=tableTyp;
        this.canEdit=canEdit;
        }
    
    public Object getColumnName()
        {
        return columnName;
        }
    
    public Class<?> getTableTyp()
        {
        return tableTyp;
        }
    
    public boolean isCanEdit()
        {
        return canEdit;
        }
    
    }
    Beispiel dann
    Code:
    List<TableTreeTableModelColumn> liste=new ArrayList<>();
    liste.add(new TableTreeTableModelColumn("String",String.class,true));
    liste.add(new TableTreeTableModelColumn("Boolean",Boolean.class, true));
    ta=new TableTreeTableModel(liste);
    Um die Daten der Klasse zu lesen müsstest du mit Reflection die Klasse analysieren
    Zuletzt editiert von Christian Marquardt; 05.12.2021, 22:34.
    Christian

    Comment


    • Jeykay
      Jeykay commented
      Editing a comment
      Hallo.

      Danke soweit. Das habe ich erst mal nach Hinten verschoben
Working...
X