java swing-JTable

    在java桌面级应用系统的开发过程中大部分设计到数据库的软件 我想大部分都会用到JTable这个组建。以下是我在实际操练过程中的一些看法和想法结合参考书籍上的内容所整理的一些东西,希望对初学java的朋友们能有所帮助。

 

简单了解

在一般情况下我们都不是在窗口中直接单独使用表格这个组件。而我们常常的做法是将表格这个组件有放在另外一个组件上。这时我们就需要先来了解一下与JTable显示有关的几个类了。

JScrollPane类

DefaultTableModel类

JScrollPane可以产生一个放置表格的组件而且会自动产生竖直方向的滚动条。

用法如下

final JScrollPane scrollPane = new JScrollPane(); no one will only a

       frame.getContentPane().add(scrollPane, BorderLayout.CENTER);

 

       table = new JTable(20,10);

       scrollPane.setViewportView(table);

首先来生成一个JScrollPane的对象然后将该对象添加到窗口的基层面板中以保证可以正常显示这个组件。接下来的两行是给这个组件中添加一个可以显示的20行10列的原始表格。

DefaultTableModel类就相当于一个显示的框架一样来可以用来控制表格显示的样式。以上代码亦可以这样写

final JScrollPane scrollPane = new JScrollPane();

       frame.getContentPane().add(scrollPane, BorderLayout.CENTER);

 

       DefaultTableModel tmd=new DefaultTableModel(20,10);

       table = new JTable(tmd);

       scrollPane.setViewportView(table);

但是我们要对诸多的表格样式控制的话还是借助于DefaultTableModel等不同的model类比较好。

一、表格的初始化 the alongs years and

a)   简单初始化

例如如下程序所示

table = new JTable(20,10);

       scrollPane.setViewportView(table);

第一局中的对象生成是就利用的JTalbe类的构造函数构造出一个20行10列的原始表格来。运行结果如下图所示。

java <wbr>swing-JTable

我们看到运行的结果中是带有竖直方向的滚动条的。但是并没有我们想看到的表头。二是默认的用A-Z等来表示的象征性的表头。

b)   利用数组

我们知道表格是可以看成一个二维数组的。正好我们可以借助于数组来建立一个N行N列的自定义表格。

例如如下程序所示

String[][] row=new String[20][10];

String[] column={"id","name","eduid","sex","age","birthday","addres","remark"};

     

       DefaultTableModel tmd=new DefaultTableModel(row,column);

       table = new JTable(tmd);

       scrollPane.setViewportView(table);

前面的两行分别定义了一个二维数组和一个以为数组。二维数组用来定义表格的行数和列数。而以为数组则是用来定义表格的表头。(值得注意的是虽然表格最终的列数是由你所定义的表头决定的(如果你定义了两个列的表头不管二维数组中定义的列式多少最终只会显示两列)但是表头的个数一定要不大于二维数组定义的列数)

运行效果如下图所示

java <wbr>swing-JTable

 

可以看到表格中显示了我们定义好的表头。

c)   利用向量

        i.      说说向量

Java类库中提供了一个动态数组类型即vector它可以用来动态的存储数据。且不会造成资源和空间的浪费。常常我们会遇到不知道数据量的大小而无法确定数据存储结构的大小的问题。Vector便可以解决此问题。它会根据你的数据量的大小来自行减小或扩张存储空间。够人性化吧。

       ii.      解决思想

我们可以在设置model类的时候就将model的参数设置为一个vector对象这样一来,就相当于表格中已经被填充了一个向量

我们可以利用向量的特性用一个向量来存储一条记录。

那么有多条记录时。我们便可以利用循环来扩充vector。

最后将记录所在的向量添加到设置model时所产生的向量中(二维向量)。便可以产生一个类似于二维数组的的表格模型。同事根据向量的特性我们对表格数据的操作可以通过对向量的操作来实现。

     iii.      开始

AbstractTableModel类

上面说了不同的model类有不同的用处现在我们来使用AbstractTableModel类

我们首先需要利用AbstractTableModel类类在生产model对象的时候给表格内初始化一个vector对象进去。而AbstractTableModel类本身并没有这个方法的实现所以我们继承AbstractTableModel类来自定义一个类以实现我们需要的功能。则又如下代码

class Table_Model extends AbstractTableModel {

           private Vector content = null;

                   public Table_Model() {

           content = new Vector();

    }

           ..

}

以上代码实现了我们自定义的model类

在这个自定义的model类中我们还会定义一系列的用于对数据操作的方法以实现对表格中数据的操作(增删改查等)

如下代码

public void addRow(String name, boolean sex, String age) {

       Vector v = new Vector();

       v.add(0, new Integer(content.size()));

       v.add(1, name);

       v.add(2, new Boolean(sex));

       v.add(3, age);

       content.add(v);

   }

 

   public void removeRow(int row) {

       content.remove(row);

   }

   public void removeRows(int row, int count) {

       for (int i = 0; i < count; i++) {

          if (content.size() > row) {

              content.remove(row);

          }

       }

   }

..

以上代码中的解释了对表格中的数据添加和删除的操作,而删除中又有单行删除和多行删除。

值得注意的是在AbstractTableModel类中需要通过重写AbstractTableModel类中的getColumnCount和getColumnName方法来实现表头的自定义代码如下

private String[] title_name = { "ID", "姓名", "性别", "年龄" };


public String getColumnName(int col) {

       return title_name[col];

   }

 

   public int getColumnCount() {

       return title_name.length;

   }

效果如下图所示

   java <wbr>swing-JTable

                 


以上是填入数据后的效果

 

java <wbr>swing-JTable

以上是清除数据后的效果

二、列宽及字体显示样式

a)   相关类

        i.      DefaultTableCellRenderer类 设置单元格中的字体显示方式

       ii.      TableColumn类  设置列宽

b)   使用方法

        i.      重写JTable中的getDefaultRenderer方法来实现对单元格内容显示样式的控制。

       ii.      利用TableColumn的对象可以获取到表格的某一行然后对其宽的进行设置

c)   示例

        i.      设置单元格样式的示例

@Override

   public TableCellRenderer getDefaultRenderer(Class

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值