网页功能: 加入收藏 设为首页 网站搜索  
在运行时设置JTable的选项
发表日期:2004-07-30作者:[转贴] 出处:  


在运行时设置JTable选项

 

概述
Jtable类提供丰富的网格数据显示功能。这个技巧处理有关动态改变诸如滚动条,列宽以及行高等通常的外观的问题 (900 words; 九月14, 2001) (九月 202001译)

Java基础类(JFC)为创建一个精巧和交互的图形用户界面(GUIs)提供了丰富的组件选择。你可以使用javax.swing.JTable 显示表格式的数据。在这个技巧中,我们研究如何JTable 的常见问题。

首先让我们定义一个最初的,基本的Jtable类?D?DMyTable:
import javax.swing.table.*;
import javax.swing.*;
import java.awt.*;
public class MyTable extends JTable{
      //缺省构造函数
      public MyTable(){
           super();
           }
      //使用指定的行列数创建表格的构造函数
        public MyTable(int row, int col){
            super(row, col);
            }
     }

相当简单!! 我们最初的 MyTable 实现就是一个普通的Jtable 。

下一节,我们将致力于不同的JTable 显示选项?D?D例如滚动条,列宽,选择性以及其它一些属性。我们将扩充MyTable 并且合并一些不同的方法使得它支持我们想要的显示特性。每一节增加一个新方法到MyTable ,最后我们得到一个可完全复用的Jtable 。

滚动表格
首先,让我们的JTable 显示一些表格式的数据。我创建TableColumnTest示范Jtable 的能力:

import javax.swing.table.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
/**Author Sonal Goyal, sonal_goyal@hotmail.com
*/
public class TableColumnTest{
    protected JFrame frame;
    protected JScrollPane scrollpane;
    protected MyTable table;
    public TableColumnTest(){
      //(1) 创建表格模型。
      DefaultTableModel dm = new DefaultTableModel();
      // 每列的名字
      String[] columnNames = {
            "This is going to be a really long column header",
            "Column B", "Column C", "Column D", "Column E", "Column F",
            "Column G", "Column H", "Column I",  "Column J"
            };

      // 实际的数据值
      Integer[][] data = new Integer[8][10];
      // 初始化数据矩阵。
      for (int row = 0; row < 8; row++){
            for (int col = 0; col < 10; ++col){
                  data[row][col] = new Integer(1000000);
            }
      }
      // 设置模型和数据及列头关联

      dm.setDataVector(data, columnNames);
      //(2) 创建表格
      table = new MyTable();
      //(3) 连接模型和表格
      table.setModel(dm);
      //(4) 为表格创建滚动面板
      scrollpane =  new JScrollPane(table);
      //(5) 显示表格
      frame =  new JFrame();
      frame.getContentPane().add(scrollpane);
      frame.setSize(200, 150);
      frame.setVisible(true);
  }
public static void main(String[] args){
       TableColumnTest test = new TableColumnTest();
}

示范程序相当简单。我们通过下面的步骤构造了一个简单的JTable:

?         创建并设置TableModel, 它包含行,列,列头以及数据数据的信息

  • 创建并设置JTable, 它根据模型显示数据
  • JTable 和第一步创建的模型关联

但是在这个代码里有一个曲解: 第四步加入了一个滚动面板。我们将构建的表格显示在一个Jframe里面; 参看图1

1. 杂乱的滚动

就像图1显示的那样,很难辨别任何列头或者是表格数据。虽然我们增加了滚动条,但水平滚动条没有显示。让我们详细的查看JTable 来揭示原因。JTable 有一个自动调整大小的模式,这将决定表格是否自动的调整列宽 (去覆盖表格的整个宽度) 以及如何进行调整。可以使用下面的值:

?         AUTO_RESIZE_OFF: 不自动调整列宽; 使用滚动条

  • AUTO_RESIZE_NEXT_COLUMN: 当一列被调整,反向调整下一列
  • AUTO_RESIZE_SUBSEQUENT_COLUMNS: 在调整时改变后续列以保持总的宽度
  • AUTO_RESIZE_LAST_COLUMN: 在所有的调整操作上只将调整应用到最后一列
  • AUTO_RESIZE_ALL_COLUMNS: 在所有的调整操作上成比例的调整所有的列。

缺省情况下,JTable 调整其它列以保持总的外观,就像图1说明的那样。因此,如果我们想用水平滚动条显示列,我们需要给MyTable 添加一个方法并在构造函数里面调用它:

/**这个方法在需要的时候显示水平滚动条

 * 两个构造函数都调用它
     */
     public void showHorScroll(boolean show){
      if (show){
          setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
      }else{
          setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
      }
     }

2 显示了一个可见的水平滚动条:

2. 可见的水平滚动条

控制JTable 的列
你可以控制列的宽度,也可以使它们不可调整,这一节展示该如何做。

加宽列
通常你想让一个列必另一个更宽或更窄。要改变列的宽度,你可以使用TableColumnModel:

      /**这个方法设置pColumn指示的列的宽度为pWidth
       */
      public void setColumnWidth(int pColumn, int pWidth){
            //得到列的样式
            TableColumnModel colModel = getColumnModel();
            //得到pColumn列然后设置它的最佳宽度
                colModel.getColumn(pColumn).setPreferredWidth(pWidth);
      }

你也可以给Jframe增加一个按钮以及它的监听器,点击按钮改变表格的宽度:

    JButton resizeButton = new JButton("Resize Third Column");
    setResizeButton.addActionListener(this);
    public void actionPerformed(ActionEvent e){
      //检查是哪一个按钮被点击
          if (e.getActionCommand().equals("Resize Third Column")){
                 System.out.println("Resize called - resizes third column
    to 300");
                 table.setColumnWidth(2, 300);
                 //强制GUI刷新
                 table.invalidate();
                 frame.invalidate();
                 frame.validate();
                 frame.repaint();
            }

在这个例子中, pColumn 是列的索引值,pWidth 是新的列宽。点击Resize 按钮的效果显示为图3 4

 

3. 点击前

 

 

图四 4. 点击后

不可变列
对于通常的应用,你可以拖动列头调整列的大小。下面的代码根据pIsResize 的值设置表格的调整性。如果pIsResize true, 列宽可以调整;否则不能<

我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 在运行时设置JTable的选项

本类热点文章
  Java读取文件中含有中文的解决办法
  Java读取文件中含有中文的解决办法
  简单加密/解密方法包装, 含encode(),de..
  EJB 3.0规范全新体验
  java简单的获取windows系统网卡mac地址
  让Java程序带着JRE一起上路
  抢先体验"野马"J2SE6.0
  Java连接各种数据库的实例
  Java连接各种数据库的实例
  JAVA的XML编程实例解析
  Java学习从入门到精通(附FAQ)
  新手必读:Java学习的捷径
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2024 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.0112