2010-04-08 63 views
1

對於以下代碼,我無法將列大小設置爲自定義大小。爲什麼會這樣?還有第一列沒有被顯示。如何更改表格的列寬

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

回答

3

這裏有幾個問題。首先,始終初始化從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像素寬。

2

當自動調整大小模式設置爲off時,表格佈局時不會調整列寬。從JTable的doLayout()文檔:

AUTO_RESIZE_OFF:不自動調整列的寬度。使用 水平滾動條可以容納 列,當它們的總和超過視口的寬度 。 如果JTable 未包含在JScrollPane中,則此 可能會使表 的某些部分不可見。

嘗試添加JTableJScrollPane,然後加入該到面板上。