初始化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);
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);
相关文章推荐
- NSComparisonResult和NSComparator
- 数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)
- UIbottun使用详解
- SPFA
- 【转载】CSS常用英文字体介绍
- 二叉树的最大深度算法面试题-leetcode学习之旅(3)
- 二叉树的最大深度算法面试题-leetcode学习之旅(3)
- 二叉树的最大深度算法面试题-leetcode学习之旅(3)
- 数组NSArray和可变数组NSMutableArray的基础知识
- Spark on Yarn——spark1.5.1集群配置
- 二叉树的最大深度算法面试题-leetcode学习之旅(3)
- Random类(随机数)
- iOS数据库操作(使用FMDB)
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十八)
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十八)
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十八)
- Unity3D-Terrain地形编辑
- 2015-11-11
- Subsets and Subsets II
- 多线程的创建问题