package tabmulti02; import java.awt.BorderLayout; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableColumn; @SuppressWarnings( "serial" ) public class TablePanel extends JPanel { public TablePanel( ) { super( new BorderLayout() ); tableModel = new MultiplicationTableModel(); table = new JTable( tableModel ); add( new JScrollPane( table ), BorderLayout.CENTER ); //--- définie une taille minimale pour les colonnes TableColumn col = null; for ( int i = 0; i < tableModel.getColumnCount(); i++ ) { col = table.getColumnModel().getColumn( i ); col.setMinWidth( i == 0 ? 50 : 80 ); } } private JTable table; private MultiplicationTableModel tableModel; } //================================ TableModel @SuppressWarnings( "serial" ) class MultiplicationTableModel extends AbstractTableModel { @Override public int getRowCount() { return NB_LIGNES; } @Override public int getColumnCount() { return NB_COL; } @Override public Object getValueAt( int rowIndex, int columnIndex ) { return ( columnIndex == 0 ? rowIndex + 1 : formatMulti( columnIndex, rowIndex + 1 ) ); } public String getColumnName( int columnIndex ) { return columnIndex == 0 ? "Table:" : Integer.toString( columnIndex ); } private String formatMulti( int noTable, int valeur ) { return Integer.toString( noTable ) + " x " + valeur + " = " + ( noTable * valeur ); } private final static int NB_LIGNES = 10; private final static int NB_COL = 11; }