调整表格的第一列,即显示java中的列的数字

时间:2011-04-26 13:58:56

标签: java swing jtable jscrollpane

我包含了我的应用程序的示例代码

第一堂课

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

    }
    }

和第二课

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

但行号列未调整大小。

2 个答案:

答案 0 :(得分:0)

这是因为您要在列上设置首选大小,而是需要在行标题的JViewport上设置它。

这一行之后:

    scrollPane.setRowHeaderView(lineTable);

试试这个:

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

答案 1 :(得分:0)

我不使用JXTable,因此我无法发送您的代码。但是对于JTable来说,你的基本逻辑看起来还不错。

看一下适合我的Row Number Table。也许不同之处在于我创建TableColumn并分配标头值的方式。