typeTable.setPreferredScrollableViewportSize(typeTable.getPreferredSize());
JScrollPane typeTableScrollPane=new JScrollPane(typeTable);


mt.pack();
mt.setVisible(true);
import java.awt.*;

import javax.swing.*;


public class MixerTest2 extends JFrame
{


public MixerTest2()
{
super("Customer Editor Test");
setSize(600,160);
setDefaultCloseOperation(EXIT_ON_CLOSE);

JTable typeTable=new JTable();

typeTable=new JTable(new String [][]
{


{"312fs", "33232", "32", "32"},


{"3212fsdfa12", "3322", "32", "32"},


{"3212fa12", "321212", "321212", "321212"},


{"3212gsds12", "321212", "321212", "321212"}
},

new String []
{
"Title 1", "Title 2", "Title 3", "Title 4"
}
);
typeTable.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);

typeTable.getColumnModel().getColumn(0).setPreferredWidth(10);
typeTable.getColumnModel().getColumn(1).setPreferredWidth(30);
JScrollPane typeTableScrollPane=new JScrollPane(typeTable);

getContentPane().add(typeTableScrollPane);
}


public static void main(String args[])
{
MixerTest2 mt = new MixerTest2();
mt.setVisible(true);
}
}

在上面的代碼中,我打算在JTable初始化的過程中,調用typeTable.getColumnModel().getColumn(0).setPreferredWidth(10);初始化各列的寬度。
但實際的情況是,只有我將初始值設為大于75時,該命令才會成功,否則就是各列均等。
原因:
沒有具體指定寬度的列,JTable會默認的設置為75。
JTable 的寬度=10+30+75+75=190
而在我的這個樣例程序中,JFrame 寬度為600,遠遠大于JTable 的寬度。因此程序按照我的初始值繪制完JTable之后,會自動的根據JFrame 的大小及布局再重新調整。這樣就造成與代碼不符的情況。
在網上查詢到,有人推薦使用
Table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);這樣會解決問題,但同時我們也失去使用AutoResizeMode的好處。
將代碼修改如下,問題解決:
typeTable.setPreferredScrollableViewportSize(typeTable.getPreferredSize());
JScrollPane typeTableScrollPane=new JScrollPane(typeTable);


mt.pack();
mt.setVisible(true);
posted @
2008-12-12 14:06 川流不息 閱讀(2305) |
評論 (0) |
編輯 收藏
使用命令重新設置JPanel的布局。
1)在JPanel上添加或者刪除組件;
2)完成布局;
3)調用 validate();使新布局有效。
posted @
2008-12-12 13:43 川流不息 閱讀(304) |
評論 (0) |
編輯 收藏