Die Erstellung einer Tabelle folgt in ihrem Design,
ähnlich z.B. den Listen, dem Model-View-Controller-Pattern, wobei
javax.swing.JTable dem View entspricht, das ggfs. noch durch einen
TableCellRenderer modifiziert werden kann. Ein Model übernimmt dabei die
Speicherung der Tabellendaten. So ist die immer wünschenswerte Trennung
von Form und Inhalt gewährleistet.
Die Klasse SimpleTableClass leitet sich von JFrame ab und stellt einen
"normalen" JFrame bereit, in den ein Scrollbereich und in diesen eine JTable
eingebettet werden. Vor dieser Einbettung wird die Tabelle durch die Methode
setColumnWidth() bezüglich ihrer Spaltenbreite formatiert. Sie
macht nichts anderes, als in einer Schleife alle Spalten zu durchlaufen und
zwei Spalten auf eine vorher als Instanzvariablen definierte, bevorzugte
Breite zu setzen.
Bei ihrer Initialisierung bekommt das JTable-Objekt
eine Instanz eines TableModels übergeben, das den Tabellen-Inhalt
verwaltet.
Die Model-Klasse, die sich von DefaultTableModel ableitet,
besitzt hier lediglich einen Parameter-losen Konstruktor. In ihm wird durch
die Methode initModelData() ein provisorischer Tabelleninhalt
erzeugt, der natürlich beliebig ersetzt werden kann.
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
public class SimpleTableClass extends JFrame {
private final int small = 50;
private final int big = 150;
private JTable table;
public SimpleTableClass() {
table = new JTable(new SimpleTableModel());
setColumnWidth();
JScrollPane sPane = new JScrollPane(table);
getContentPane().add(sPane);
this.setSize(600, 250);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
private void setColumnWidth() {
for (int i = 0; i < table.getColumnCount(); i++) {
TableColumn c = table.getColumnModel().getColumn(i);
switch (i) {
case 1:
c.setPreferredWidth(small);
break;
case 4:
c.setPreferredWidth(big);
break;
default:
c.setPreferredWidth(JTable.AUTO_RESIZE_ALL_COLUMNS);
}
}
}
public static void main(String[] args) {
new SimpleTableClass();
}
}
class SimpleTableModel extends DefaultTableModel {
private int rows = 30, cols = 10;
private Object[] rowData = new Object[cols];
public SimpleTableModel() {
super();
initModelData();
}
private void initModelData() {
for (int i = 0; i < cols; i++) {
this.addColumn(Integer.toString(i));
}
for (int j = 0; j < rows; j++) {
for (int i = 0; i < cols; i++) {
rowData[i] = j + " | " + i;
}
this.addRow(rowData);
}
}
}