初始化JTable 各列的宽度

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值