开发者

resize the first column of table i.e number showing column in java

I include sample code of my application

1st class

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import org.jdesktop.swingx.JXTable;
import javax.swing.table.TableColumn;

public class setcolwidth {

    public static void main(String args[]) {

        final Object rowData[][] = {
            {"kirti", "one", "I"},
            {"kkk", "two", "II"},
            {"kiki", "three", "III"}};
        final String columnNames[] = {"#", "English", "Roman"};

        final JTable table = new JTable(rowData, columnNames);
        JScrollPane scrollPane = new JScrollPane(table);

        JXTable lineTable = new LineNumberTable(table);
        scrollPane.setRowHeaderView(lineTable);
        table.getTableHeader().setReorderingAllowed(false);
        JFrame frame = new JFrame("Resizing Table");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(scrollPane, BorderLayout.CENTER);


        TableColumn column = null;
        int i=0;
        try{

            column = lineTable.getColumnModel().getColumn(i);

                column.setPreferredWidth(50);

        }catch(Exception ex){
            System.out.println("Error for the column index"+i+" Err"+ex.toString());
        }

        frame.setSize(300, 150);
        frame.setVisible(true);

    }
    }

and 2nd class

import javax.swing.JTable;
import javax.swing.table.*;
import org.jdesktop.swingx.JXTable;

public class LineNumberTable extends JXTable {
    private JTable mainTable;

    public LineNumberTable(JTable table) {
        super();
        mainTable = table;
        setAutoCreateColumnsFromModel( false );
        setModel( mainTable.getModel() );
        setAutoscrolls( false );
        addColumn( new TableColumn() );
        getColumnModel().getColumn(0).setCellRenderer(mainTable.getTableHeader().getDefaultRenderer());
      //  mainTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        getColumnModel().getColumn(0).setPreferredWidth(40);
        setPreferredScrollableV开发者_开发技巧iewportSize(getPreferredSize());

    }

    @Override
    public boolean isCellEditable(int row, int column) {
        return false;
    }

    @Override
    public Object getValueAt(int row, int column) {
         return Integer.valueOf(row+1);
    }

    @Override
    public int getRowHeight(int row) {
        return mainTable.getRowHeight();
    }
}

But the row number column is not resizing.


That is because you are setting the preferred size on the column and need to be setting it on the JViewport on the row header instead.

After this line:

    scrollPane.setRowHeaderView(lineTable);

Try this:

    scrollPane.getRowHeader().setPreferredSize(new Dimension(150,150));


I don't use JXTable so I can't text your code. But your basic logic looks ok to me for a JTable.

Take a look at my Row Number Table which works for me. Maybe the difference is the way I create the TableColumn and assign a header value.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜