Ein Beispiel für die Erstellung einer einfachen Tabelle

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);
        }
    }
}