Set size of column in JTable

Miljana picture Miljana · Apr 27, 2011 · Viewed 12.9k times · Source

I have class that extends JTable and I have class implements TableModel, DefaultActionTableModel

public class RingTable extends JTable {

    private static final long serialVersionUID = -2828916773705542169L;
    private RingTableModel model;

    public RingTable () {
    }

    public RingTable (List<String> columns) { // NO_UCD
        model = new RingTableModel(columns);
        setModel(model);
    }

    public RingTable (List<String> columns, List<TableRing> tableRings) {
        model = new RingTableModel(columns, tableRings);
        setModel(model);
    }

    /**
     * Dodaje novu vrstu u tabelu sa zadatim indeksom
     * @param i
     */
    public void addRow(int i) {
        model.addRow(i);
    }


    public boolean addRow(TableRing tableRing) { // NO_UCD
        return model.addRow(tableRing);
    }

    /**
     * Uklanja vrstu iz tabele koja ima indeks kao prosledjeni parametar
     * @param i
     * @return
     */
    private boolean removeRow(int i) {
        model.removeRow(i);
        return true;
    }

    /**
     * Uklanja sleektovane vrste iz tabele
     */
    public void removeSelectedRows() {
        int[] indices = getSelectedRows();
        Arrays.sort(indices);
        removeRowSelectionInterval(0, getRowCount()-1);
        for (int i = indices.length-1; i >= 0; i--)
            removeRow(indices[i]);
    }

    /**
     * Uklanja sve vrste iz tabele
     */
    public void removeAllRows() { // NO_UCD
        while (model.getRowCount() > 0) {
                removeRow(0);
        }
    }

}

and

 public class RingTableModel implements TableModel, DefaultActionTableModel {

        private List<String> columns; // = new LinkedList<String>();
        private List<TableRing> tableRings;


        /**
         * 
         */
        public RingTableModel() {
        }

        /**
         * 
         */
        public RingTableModel(List<String> columns) {
            this(columns, new LinkedList<TableRing>());
        }

        /**
         * 
         */
        public RingTableModel(List<String> columns, List<TableRing> tableRings) {
            this.columns = columns;
            this.tableRings = tableRings;
        }



        /* (non-Javadoc)
         * @see javax.swing.table.TableModel#addTableModelListener(javax.swing.event.TableModelListener)
         */
        public void addTableModelListener(TableModelListener l) {
            // TODO Auto-generated method stub

        }

        /* (non-Javadoc)
         * @see javax.swing.table.TableModel#getColumnClass(int)
         */
        public Class<?> getColumnClass(int columnIndex) {
            switch (columnIndex) {
                case 0: // Index
                    return Integer.class;
                case 1: // Name
                    return String.class;
                case 2: // Show Dampers
                case 3: // Show Inputs
                case 4: // Show Outputs
                    return Boolean.class;
                case 5: // Host
                    return String.class;
                default:
                    return Boolean.class;
            }
        }

        /* (non-Javadoc)
         * @see javax.swing.table.TableModel#getColumnCount()
         */
        public int getColumnCount() {
            return (columns!=null)?columns.size():0;
        }

        /* (non-Javadoc)
         * @see javax.swing.table.TableModel#getColumnName(int)
         */
        public String getColumnName(int columnIndex) {
            if (columns == null)
                return null;
            if (columns.size() <= columnIndex)
                return null;
            if (columnIndex < 0)
                return null;
            return columns.get(columnIndex);
        }

        /* (non-Javadoc)
         * @see javax.swing.table.TableModel#getRowCount()
         */
        public int getRowCount() {
            return (tableRings == null)?0:tableRings.size();
        }

        /* (non-Javadoc)
         * @see javax.swing.table.TableModel#getValueAt(int, int)
         */
        public Object getValueAt(int rowIndex, int columnIndex) {
            if (tableRings == null)
                return null;
            if (rowIndex < 0 || rowIndex >= tableRings.size())
                return null;
            if (columnIndex < 0 || columnIndex >= columns.size())
                return null;
            TableRing tableRing = tableRings.get(rowIndex);
            switch (columnIndex) {
                case 0:
                    return rowIndex+1;
                case 1:
                    return tableRing.getName();
                case 2:
                    return tableRing.getShowDampers();
                case 3:
                    return tableRing.getShowInputs();
                case 4:
                    return tableRing.getShowOutputs();
                case 5:
                    return tableRing.getHost();
                default:
    //              TODO HARDCODE! broj kolona 
    //              return tableRing.getTableAlarms().contains(RootData.getRootData().getEditableRingView().getTableAlarms().get(columnIndex-6));
                    if (tableRing.getTableAlarms().containsKey(columnIndex-RingTablePanel.COLUMN_NUMBER + 1)) {
                        return tableRing.getTableAlarms().get(columnIndex-RingTablePanel.COLUMN_NUMBER + 1);
                    }
                    return false;
            }
        }

        /* (non-Javadoc)
         * @see javax.swing.table.TableModel#isCellEditable(int, int)
         */
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            switch (columnIndex) {
                case 0:
                    return false;
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                    return true;
                default:
                    return true;
            }

        }

        /* (non-Javadoc)
         * @see javax.swing.table.TableModel#removeTableModelListener(javax.swing.event.TableModelListener)
         */
        public void removeTableModelListener(TableModelListener l) {
            // TODO Auto-generated method stub

        }

        /* (non-Javadoc)
         * @see javax.swing.table.TableModel#setValueAt(java.lang.Object, int, int)
         */
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
            if (tableRings == null)
                return ;
            if (aValue == null) {
                return;
            }
            if (rowIndex < 0 || rowIndex >= tableRings.size())
                return ;
            if (columnIndex < 0 || columnIndex >= columns.size())
                return ;
            TableRing tableRing = tableRings.get(rowIndex);
            switch (columnIndex) {
                case 0:
                    break;
                case 1:
                    tableRing.setName((String)aValue);
                    break;
                case 2:
                    tableRing.setShowDampers((Boolean)aValue);
                    break;
                case 3:
                    tableRing.setShowInputs((Boolean)aValue);
                    break;
                case 4:
                    tableRing.setShowOutputs((Boolean)aValue);
                    break;
                case 5:
                    tableRing.setHost((String)aValue);
                    break;
                default:
    //              HARDCODE! broj kolona 
    //              TableAlarm tableAlarm = RootData.getRootData().getEditableRingView().getTableAlarms().get(columnIndex-RingTablePanel.COLUMN_NUMBER);
    //              if (tableAlarm != null && tableRing.getTableAlarms().containsKey(tableAlarm.getId())) {
    //                  tableRing.getTableAlarms().remove(tableAlarm);
    //              } else if (tableAlarm != null && tableRing.getTableAlarms().size() < RootData.getRootData().getMaxNoOfAlarms()){
    //                  tableRing.getTableAlarms().put(tableAlarm.getId(), true);
    //              } else {
    //                  Actions.showErrorDialog(RootData.getRootData().getResource("Error.TooManyAlarms", "Too many alarms selected in ring! Maximum is:") + " " + RootData.getRootData().getMaxNoOfAlarms(), RootData.getRootData().getResource("Error.Default", "Error"));
    //              }
    //              return ;
                    if (tableRing.getTableAlarms().containsKey(columnIndex-RingTablePanel.COLUMN_NUMBER + 1)) {
                        tableRing.getTableAlarms().put(columnIndex-RingTablePanel.COLUMN_NUMBER + 1, !tableRing.getTableAlarms().get(columnIndex-RingTablePanel.COLUMN_NUMBER + 1));
                    } else {
                        tableRing.getTableAlarms().put(columnIndex-RingTablePanel.COLUMN_NUMBER + 1, true);
                    }

                    return;
            }
        }


        // Non-interface methods

        /**
         * This method adds a new column to the table, if no columns were defined, a new list is created
         */
        private void addColumn(String columnName) {
            if (columns == null)
                columns = new LinkedList<String>();
            columns.add(columnName);
        }

        /**
         * This method creates a new ring row
         * 
         * @return <b>true</b> - always
         */
        public void addRow(int i) {
            tableRings.add(i, new TableRing(""));
        }


        public boolean addRow(TableRing tableRing) {
            return tableRings.add(tableRing);
        }


        /**
         * This method removes a single row from the table
         * @param i the index of the row to be removed 
         */
        public void removeRow(int i) {
            tableRings.remove(i);
        }

        public void setColumns(List<String> columns) {
            this.columns = columns;

            int noAlarms = RootData.getRootData().getEditableRingView().getTableAlarms().size();
            for (int i=1; i<=noAlarms; i++) {
                addColumn("A_" + i);
            }

        }


    }

How to set size on 100px for columns "A_number" (A_1, A_2 ... from list ) ?

Answer

jzd picture jzd · Apr 27, 2011

From: http://download.oracle.com/javase/tutorial/uiswing/components/table.html

To customize initial column widths, you can invoke setPreferredWidth on each of your table's columns. This sets both the preferred widths of the columns and their approximate relative widths. For example, adding the following code to SimpleTableDemo makes its third column bigger than the other columns:

TableColumn column = null;
for (int i = 0; i < 5; i++) {
    column = table.getColumnModel().getColumn(i);
    if (i == 2) {
        column.setPreferredWidth(100); //third column is bigger
    } else {
        column.setPreferredWidth(50);
    }
}

So loop through your list of columns and set the preferred width to 100 for each of your columns that you want set.