Swing表格列宽自适应
来源:互联网 发布:德州软件开发 编辑:程序博客网 时间:2024/04/30 08:09
Swing表格列宽自适应
分类: J2SE 2010-05-31 23:56 1805人阅读 评论(0)收藏 举报
swingtablenull
Swing表格列宽自适应
从别人分享的代码中得到了一些启发。
1.要想实现JTable宽度自适应,必须首先调用setAutoResizeMode方法,将JTable的自适应模适修改为JTable.AUTO_RESIZE_OFF,默认为JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS。
在设置此方法前,需要先比较如果表格当前的实际大小并没有达到父容器的宽度,则将其设置为AUTO_RESIZE_SUBSEQUENT_COLUMNS使表格充满父容器,这样更好看些。如果超过了父容器的宽度,则设置为JTable.AUTO_RESIZE_OFF,用自已实际计算的宽度进行设置。因些,在这儿需要比较表格的实际大小与父容器的实际大小再进行设置。
2.宽度自适应需要考虑到表头和表格列数据的实际宽度,对每一列的实际宽度做比较,包括表头,取其中最大值,并设置其值为比较后的最大值。注意,需要调用table().getColumnModel().getColumn(j).setPreferredWidth(max)而不是setWidth方法。
3.一般我们在程序使用过程中都会把JTable加到一个JScrollPane中,以便使JTable实现滚动功能。因此,当我们要达到自适应时,将表格自适应属性设置为JTable.AUTO_RESIZE_OFF后,需要为父容器填加ComponentListener,并实现componentResized方法,在该方法中对表格的宽度进行自适应设置。
4.具体代码如下:
//表格
JTable table=new JTable();
//表格要增加的滚动面板
JScrollPane scrollPane=new JScrollPane(table);
//为滚动面板添加ComponentListener
tablePanel.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
resizeTable(true);
}
});
//表格自适应方法,需要在表格初始化后,父容器大小发生变化后以及表格模型修改后调用
public void resizeTable(boolean bool) {
Dimension containerwidth = null;
if (!bool) {
//初始化时,父容器大小为首选大小,实际大小为0
containerwidth = scrollPane.getPreferredSize();
} else {
//界面显示后,如果父容器大小改变,使用实际大小而不是首选大小
containerwidth = scrollPane.getSize();
}
//计算表格总体宽度
int allwidth = getTable().getIntercellSpacing().width;
for (int j = 0; j < getTable().getColumnCount(); j++) {
//计算该列中最长的宽度
int max = 0;
for (int i = 0; i < getTable().getRowCount(); i++) {
int width = getTable().
getCellRenderer(i, j).getTableCellRendererComponent
(getTable(), getTable().getValueAt(i, j), false,
false, i, j).getPreferredSize().width;
if (width > max) {
max = width;
}
}
//计算表头的宽度
int headerwidth = getTable().
getTableHeader().
getDefaultRenderer().getTableCellRendererComponent(
getTable(), getTable().getColumnModel().
getColumn(j).getIdentifier(), false, false,
-1, j).getPreferredSize().width;
//列宽至少应为列头宽度
max += headerwidth;
//设置列宽
getTable().getColumnModel().
getColumn(j).setPreferredWidth(max);
//给表格的整体宽度赋值,记得要加上单元格之间的线条宽度1个像素
allwidth += max + getTable().getIntercellSpacing().width;
}
allwidth += getTable().getIntercellSpacing().width;
//如果表格实际宽度大小父容器的宽度,则需要我们手动适应;否则让表格自适应
if (allwidth > containerwidth.width) {
getTable().setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
} else {
getTable().
setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
}
}
http://blog.csdn.net/hcx_2008/article/details/5638230
从别人分享的代码中得到了一些启发。
1.要想实现JTable宽度自适应,必须首先调用setAutoResizeMode方法,将JTable的自适应模适修改为JTable.AUTO_RESIZE_OFF,默认为JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS。
在设置此方法前,需要先比较如果表格当前的实际大小并没有达到父容器的宽度,则将其设置为AUTO_RESIZE_SUBSEQUENT_COLUMNS使表格充满父容器,这样更好看些。如果超过了父容器的宽度,则设置为JTable.AUTO_RESIZE_OFF,用自已实际计算的宽度进行设置。因些,在这儿需要比较表格的实际大小与父容器的实际大小再进行设置。
2.宽度自适应需要考虑到表头和表格列数据的实际宽度,对每一列的实际宽度做比较,包括表头,取其中最大值,并设置其值为比较后的最大值。注意,需要调用table().getColumnModel().getColumn(j).setPreferredWidth(max)而不是setWidth方法。
3.一般我们在程序使用过程中都会把JTable加到一个JScrollPane中,以便使JTable实现滚动功能。因此,当我们要达到自适应时,将表格自适应属性设置为JTable.AUTO_RESIZE_OFF后,需要为父容器填加ComponentListener,并实现componentResized方法,在该方法中对表格的宽度进行自适应设置。
4.具体代码如下:
//表格
JTable table=new JTable();
//表格要增加的滚动面板
JScrollPane scrollPane=new JScrollPane(table);
//为滚动面板添加ComponentListener
tablePanel.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
resizeTable(true);
}
});
//表格自适应方法,需要在表格初始化后,父容器大小发生变化后以及表格模型修改后调用
public void resizeTable(boolean bool) {
Dimension containerwidth = null;
if (!bool) {
//初始化时,父容器大小为首选大小,实际大小为0
containerwidth = scrollPane.getPreferredSize();
} else {
//界面显示后,如果父容器大小改变,使用实际大小而不是首选大小
containerwidth = scrollPane.getSize();
}
//计算表格总体宽度
int allwidth = getTable().getIntercellSpacing().width;
for (int j = 0; j < getTable().getColumnCount(); j++) {
//计算该列中最长的宽度
int max = 0;
for (int i = 0; i < getTable().getRowCount(); i++) {
int width = getTable().
getCellRenderer(i, j).getTableCellRendererComponent
(getTable(), getTable().getValueAt(i, j), false,
false, i, j).getPreferredSize().width;
if (width > max) {
max = width;
}
}
//计算表头的宽度
int headerwidth = getTable().
getTableHeader().
getDefaultRenderer().getTableCellRendererComponent(
getTable(), getTable().getColumnModel().
getColumn(j).getIdentifier(), false, false,
-1, j).getPreferredSize().width;
//列宽至少应为列头宽度
max += headerwidth;
//设置列宽
getTable().getColumnModel().
getColumn(j).setPreferredWidth(max);
//给表格的整体宽度赋值,记得要加上单元格之间的线条宽度1个像素
allwidth += max + getTable().getIntercellSpacing().width;
}
allwidth += getTable().getIntercellSpacing().width;
//如果表格实际宽度大小父容器的宽度,则需要我们手动适应;否则让表格自适应
if (allwidth > containerwidth.width) {
getTable().setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
} else {
getTable().
setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
}
}
http://blog.csdn.net/hcx_2008/article/details/5638230
0 0
- Swing表格列宽自适应
- Swing表格列宽自适应
- easyui表格datagrid列宽自适应
- 表格列td自适应内容宽度
- 让表格的列自适应内容(列内容不换行)
- dbgrideh自适应列宽
- ListView列宽自适应
- JTable自适应列宽
- dbgrideh自适应列宽
- swing 表格模型增加删除行和列
- 表格等宽列
- swing 表格
- Swing面板上调整JTable的行高和列宽,以及表格超出JScorllPane时设置滚动条
- TListView 列宽自适应大小
- winform DataGridView 自适应列宽
- 表格自适应
- 表格列宽鼠标拖动
- 表格列宽鼠标拖动
- IOS 广播机制与 android 广播机制对比
- Handler多线程通信例子(post和sendMessage)
- .net multi Thread demo
- android 广播大全(转)
- 理解GBDT算法(一)——理论
- Swing表格列宽自适应
- Android Studio多渠道打包(以友盟为例)
- 网站在架构时要考虑的事情
- linux驱动中时间相关问题
- 五种类型的程序员
- linux下svn服务搭建
- Python 正则表达式改变csv文件的分隔符
- 对于程序员说的话,项目经理们是这样理解的
- VOIP