CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

有什么根据表的内容长度自动设置jtable列宽的方法?

楼主hojialiang(jialiang)2002-04-23 11:30:16 在 Java / J2SE / 基础类 提问

有什么根据表的内容长度自动设置jtable列宽的方法? 问题点数:20、回复次数:4Top

1 楼warmboat()回复于 2002-04-23 12:54:14 得分 0

public   class   MyTableHeaderUI   extends   javax.swing.plaf.basic.BasicTableHeaderUI   {  
           
          protected   void   installListeners()   {  
                  super.installListeners();  
                   
                  MouseInputHandler   mouseInputListener   =   new   MouseInputHandler();  
                  header.addMouseListener(mouseInputListener);  
          }  
           
          public   class   MouseInputHandler   extends   MouseInputAdapter   {  
   
                  public   void   mouseClicked(MouseEvent   e)   {  
                          Point   p   =   e.getPoint();  
                          int   clickCount   =   e.getClickCount();  
   
                          JTable   thisTable     =   header.getTable();  
                          FontMetrics   fm   =   thisTable.getFontMetrics(thisTable.getFont());  
                          TableColumnModel   columnModel   =   header.getColumnModel();  
                          int   index   =   getResizingColumn(p,   columnModel.getColumnIndexAtX(p.x));  
                          int   rows   =   thisTable.getRowCount();  
                          int   maxLength   =   0;  
                           
                          if   (clickCount   >   1)   {  
                                  if   (index   !=   -1   &&   rows   >   0)   {  
                                          if   (canResize(index))   {  
                                                  for   (int   i=0;   i<rows;   i++)   {  
                                                          Object   objValue   =   thisTable.getValueAt(i,   index);  
                                                          if   (objValue   instanceof   java.lang.String)   {  
                                                                  int   thisLen   =   fm.stringWidth((String)   objValue);  
                                                                  maxLength   =   Math.max(maxLength,   thisLen);  
                                                          }  
                                                  }  
                                                  if   (maxLength   >   0)  
                                                          thisTable.getColumnModel().getColumn(index).setPreferredWidth(maxLength   +   7);  
                                          }  
                                  }  
                          }  
                  }  
   
          private   boolean   canResize(int   index)   {  
                  TableColumn   tblColumn   =   header.getColumnModel().getColumn(index);  
                  return   (tblColumn   !=   null)   &&   header.getResizingAllowed()   &&   tblColumn.getResizable();  
          }  
   
                  private   int   getResizingColumn(Point   p,   int   column)   {  
                          if   (column   ==   -1)   {  
                                  return   -1;  
                          }  
                  Rectangle   r   =   header.getHeaderRect(column);  
                  r.grow(-3,   0);  
                  if   (r.contains(p))   {  
                  return   -1;  
                  }  
                  int   midPoint   =   r.x   +   r.width/2;  
                  int   columnIndex   =   (p.x   <   midPoint)   ?   column   -   1   :   column;  
                   
                  return   columnIndex;    
                  }  
   
          }  
  }  
   
  实现了类似与windows下面双击表头自动伸缩的功能。   希望对你有点参考。Top

2 楼cloudjava(甲乙丙丁)回复于 2002-04-23 13:50:06 得分 20

我在项目中也做过这个功能。给你两个现成的函数吧  
   
  1。//   取得列幅的最大值  
      private   int   getPreferredWidthForCloumn(JTable   table,int   icol){  
   
          TableColumnModel   tcl   =   table.getColumnModel();  
          TableColumn   col   =   tcl.getColumn(icol);  
          int   c   =   col.getModelIndex(),width   =   0,maxw   =   0;  
   
          for(int   r=0;r<table.getRowCount();++r){  
   
              TableCellRenderer   renderer   =   table.getCellRenderer(r,c);  
              Component   comp   =   renderer.getTableCellRendererComponent(table,table.getValueAt(r,c),false,false,r,c);  
              width   =   comp.getPreferredSize().width;  
              maxw   =   width   >   maxw?width:maxw;  
          }  
   
  2。自动设定列的宽度  
   
          // 设定每列的宽度为当列的最大的宽度。  
          for(int   i=   0;   i<table.getColumnCount();   i++){  
              int   with   =   this.getPreferredWidthForCloumn(table,i)   +   10;  
              with   =   iniCW[i]   >   with   ?   iniCW[i]   :   with;  
              table.getColumnModel().getColumn(i).setPreferredWidth(with);  
          }Top

3 楼hojialiang(jialiang)回复于 2002-04-23 16:43:02 得分 0

谢谢楼上  
  请问iniCW[i]是什么?一定给分!Top

4 楼cloudjava(甲乙丙丁)回复于 2002-04-26 11:04:33 得分 0

对不起,我刚看贴    
  iniCW[i]是我自己设定得一个初始的长度,有的时候列太窄了难看。你也可以自己定义。没有什麽影响Top

相关问题

  • 关于JTable的列宽度
  • 请大家帮忙,在线等:如何让表格中的控件长度随列宽的改变而改变?
  • 求助!列表框列宽设置
  • Applet中JTable不能自动调整列宽?
  • to:seabell 如何在第二个表格列宽不断动态变化时,使两个表格的列宽一致?
  • 有三个列的表格,如何固定两端的列宽,中间列宽自动分配?
  • 如何在Delphi中控制Word2000表格的列宽?
  • 如何使两个表格的列宽一致?
  • DataGrid子表如何设置列宽--在线等待
  • 可拖拉每列宽度的数据表列 dataGrid ,求算法

关键词

  • getcolumnmodel
  • thistable
  • jtable
  • inicw
  • mouseinputhandler
  • tblcolumn
  • 长度
  • getcolumn
  • 宽度
  • 设定

得分解答快速导航

  • 帖主:hojialiang
  • cloudjava

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo