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

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

但是行号列没有调整大小。

最佳答案

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

在这一行之后:

    scrollPane.setRowHeaderView(lineTable);

试试这个:

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

关于java - 调整表的第一列,即 java 中显示列的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5791456/

相关文章:

java - GUI创建代码布局理论?

java - DefaultTableModel - 删除行更新 vector ,添加不会

java - 如何从 firebase 实时数据库获取下一个子项的数据并将其显示在 ListView 中

java - 为什么 org.apache.hadoop.io.Writable 不能转换为 org.apache.hadoop.io.IntWritable?

java - "Extends JFrame"和 JPanel?

java - 如何比较字符串以获取缺失的单词?

java - 仅当按下按钮时才在 JTable 中保存单元格更改,如果不像以前那样保留

java - 从 .txt 文件读取并使用 .startsWith

java - 在 Boggle.java 游戏中部署启发式修剪搜索空间

java - 插入符号位置设置为最后一行开头的文本区域 (JTextArea) 的自动文本滚动