Array/Vector für JTable aufbereiten

Status
Nicht offen für weitere Antworten.

sisko78

Bekanntes Mitglied
Hallo,

habe hier mehrere Resourcen, die jeweils einen Array oder Vector liefern. Diese sollen nebeneinander in einer Tabelle dargestellt werden. Die größe der Vectoren/Arrays ist aber nicht gleich, also etwa so:

Tabelle (1=Element Resource 1, 2=Element Resource 2,usw)

123
123
12
1

Wie würdet ihr jetzt vorgehen, die Tabelle so darzustellen?
Hatte zuerst mal daran gedacht, Vectoren zu verwenden, das Maximum der Größe zu ermitteln und die zwei kleineren Vectoren mit null aufzufüllen, dann das ganze in ein 2-dim Array zu packen.
Ein weiterer Gedanke: Eigenes Tablemodell, Tabelle mit Zeilenanzahl="oben erwähntes Max" initialisieren und dann mit den 3 Resourcen füllen.
Würden die fehlenden Einträge bei manchen Zellen probleme verursachen?
Oder wie könnte man das geschickt machen?


Gruß
sisko78
 
Eigenes Table-Model schreiben. In der Methode 'getValueAt' Probleme abfangen; z.B. Wert nicht vorhanden Leeren String oder null zurück geben.
 
Danke, habe jetzt mal einen Versuch gewagt und denke, so könnte man es machen.

Code:
import java.awt.*;
import javax.swing.*;
import java.util.Vector;
import javax.swing.table.*;

public class Tabletest2
extends JFrame

{
    Vector se = new Vector();
    Vector nu= new Vector();
    Vector bla = new Vector(); 
    int rowCnt;
    
    public Tabletest2()

  {
    super("JTable 1");
    addWindowListener(new WindowClosingAdapter(true));    
    se.add("A");
    se.add("B");
    se.add("C");
    se.add("D");
    se.add("E");
    se.add("F");
    nu.add("1");
    nu.add("2");
    nu.add("3");
    nu.add("4");
    nu.add("5");
    bla.add("a");
    bla.add("b");
    bla.add("c");
    bla.add("d");
    String[] COLHEADS = {"A","B","C"};
    int rowcnt = Math.max(Math.max(se.size(),nu.size()),bla.size());
    System.out.println(rowcnt);
    this.rowCnt=rowcnt;
    
    TableModel tm = new AbstractTableModel() {
       public int getRowCount()
       { 
         return rowCnt;
       }
       public int getColumnCount()
       {
         return 3;
       }
      public Object getValueAt(int row, int column)
       { 
         switch (column) {
         case 0: return se.size()<=row ?  "" : se.get(row);           
         case 1: return nu.size()<=row ?  "" : nu.get(row);
         case 2: return bla.size()<=row ?  "" : bla.get(row);
         default: return "";
         }
       }
     };

    JTable table = new JTable(tm);
    Container cp = getContentPane();
    cp.add(new JLabel("TableTest:"), BorderLayout.NORTH);
    cp.add(new JScrollPane(table), BorderLayout.CENTER);
  }

  public static void main(String[] args)
  {
    Tabletest2 frame = new Tabletest2();
    frame.setLocation(100, 100);
    frame.setSize(300, 200);
    frame.setVisible(true);
  }
}

Gruß
sisko78
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben