您的位置:首页 > 其它

初始化JTable 各列的宽度

2015-11-11 20:40 351 查看
初始化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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: