TableColumn (Java API)

Aus Byte-Welt Wiki
Wechseln zu: Navigation, Suche

Eine TableColumn stellt eine einzelne Spalte in einer JTable dar. Eine TableColumn kann, muss aber nicht, spezielle Informationen zu der repräsentierten Spalte haben:

  • Den TableCellRenderer mit dem einzelne Zellen der Spalte gezeichnet werden.
  • Den TableCellEditor mit dem der Benutzer einzelne Zellen der Spalte verändern kann.
  • Grössenangaben wie minimale/maximale und bevorzugte Grösse

Die JTable erzeugt normalerweise TableColumns automatisch, sobald sie benötigt werden. Man kann dieses Verhalten aber mit der Methode setAutoCreateColumnsFromModel abschalten, und jede Spalte selbst erzeugen. Das folgende Beispiel zeigt eine JTable, deren TableModel drei Spalten vorgibt, die aber vier Spalten anzeigt.

package demo;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.*;
 
public class JTableDemo{
    public static void main( String[] args ){
        // Die JTable initialisieren
        JTable table = new JTable();
        
        // Spalten sollen nicht automatisch erzeugt werden
        table.setAutoCreateColumnsFromModel( false );
        
        // Daten setzen
        table.setModel( createModel() );
        
        // Spalten bestimmen
        table.setColumnModel( createColumnModel() );
         
        // Tabelle anzeigen
        JFrame frame = new JFrame( "Demo" );
        frame.add( new JScrollPane( table ), BorderLayout.CENTER );
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.pack();
        frame.setVisible( true );
    }
    
    public static TableColumnModel createColumnModel(){
        // Ein Behälter für die Spalten erzeugen
        TableColumnModel columns = new DefaultTableColumnModel();
        
        // Die 4 Spalten erzeugen. Jede Spalte kann verschiedene
        // Eigenschaften haben.
        TableColumn c1 = new TableColumn( 0 );
        c1.setHeaderValue( "ColA" );
        c1.setPreferredWidth( 35 );
        c1.setMaxWidth( 50 );
        
        TableColumn c2 = new TableColumn( 1 );
        c2.setHeaderValue( "ColB" );
        c2.setPreferredWidth( 60 );
        c2.setMinWidth( 60 );
        c2.setMaxWidth( 120 );
        
        TableColumn c3 = new TableColumn( 2 );
        c3.setHeaderValue( "ColC" );
        c3.setPreferredWidth( 10 );
        c3.setResizable( false );
        
        // Die letzte Spalte zeigt stets dasselbe wie die 
        // zweitletzte Spalte, denn beide Spalten benutzen
        // dieselbe Model-Spalte als Datenquelle
        TableColumn c4 = new TableColumn( 2 );
        c4.setHeaderValue( "ColC-2" );
        c4.setPreferredWidth( 10 );
        
        columns.addColumn( c1 );
        columns.addColumn( c2 );
        columns.addColumn( c3 );
        columns.addColumn( c4 );
        
        return columns;
    }
    
    public static TableModel createModel(){
        DefaultTableModel model = new DefaultTableModel( 
                new Object[]{ "A", "B", "C" }, 0);
        
        model.addRow( new Object[]{ "C1", "C2", "C3" });
        return model;
    }
}

Ergebnis der kompilierten Quelldatei unter Windows XP