如何更改表格的列宽

问题描述:

对于以下代码,我无法将列大小设置为自定义大小。为什么会这样?还有第一列没有被显示。如何更改表格的列宽

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTable; 
import javax.swing.table.TableColumn; 

public class Trial extends JFrame{ 
    public void create(){ 
    JPanel jp = new JPanel(); 
    String[] string = {" ", "A"}; 
    Object[][] data = {{"A", "0"},{"B", "3"},{"C","5"},{"D","-"}}; 
    JTable table = new JTable(data, string);  
    jp.setLayout(new GridLayout(2,0)); 
    jp.add(table); 

    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
    TableColumn column = null; 
    for (int i = 0; i < 2; i++) { 
     column = table.getColumnModel().getColumn(i); 
     column.setPreferredWidth(20);  //custom size 
     } 
    setLayout(new BorderLayout()); 
    add(jp); 
    } 

    public static void main(String [] a){ 
     Trial trial = new Trial(); 
     trial.setSize(300,300); 
     trial.setVisible(true); 
     trial.setDefaultCloseOperation(Trial.EXIT_ON_CLOSE); 
     trial.create(); 
    } 
} 

这里有几个问题。首先,始终初始化从Swing EDT你的JFrame这样:

public static void main(String[] a) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      Trial trial = new Trial(); 
      trial.setSize(300, 300); 
      trial.setDefaultCloseOperation(Trial.EXIT_ON_CLOSE); 
      trial.create(); 
     } 
     }); 
    } 

如果不这样做会导致细微的错误。第二:JTables喜欢在JScrollPanes中存在。这就是为什么你没有看到列标题:

JScrollPane pane = new JScrollPane(); 
    pane.setViewportView(table); 
    jp.add(pane); 

以上完成,我看到你的微小的小列,每个20像素宽。

当自动调整大小模式设置为off时,表格布局时不会调整列宽。从JTable的doLayout()文档:

AUTO_RESIZE_OFF:不自动调整列的宽度。使用 水平滚动条可以容纳 列,当它们的总和超过视口的宽度 。 如果JTable 未包含在JScrollPane中,则此 可能会使表 的某些部分不可见。

尝试添加JTableJScrollPane,然后加入该到面板上。