我们都知道JTable需要使用一个Model配合才能更好地发挥其作用。而使用Model有好多种方法,但是难易程度却大大不同,比如说我们使用AbstractTableModel接口要实现里面的好多方法,相对于这一点,使用DefaulttableModel 就可以大大而简化我们的工作量,我们只需要实现自己需要的方法就可以了。下面是一个简单的使用案例:

package UsefulKnowledge;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.util.Vector;

import javafx.stage.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;

public class JTableTest implements TableModelListener{

    JTable table=null;
    MyTable my=null;
    public JTableTest(){
        JFrame frame=new JFrame();
        my=new MyTable();
        my.addTableModelListener(this);
        table=new JTable(my);
        table.setPreferredScrollableViewportSize(new Dimension(400,80));
        JScrollPane s=new JScrollPane(table);
        Container container=frame.getContentPane();
        container.add(s,BorderLayout.CENTER);
        frame.setTitle("Add_Remove_cells");
        frame.pack();
        frame.setVisible(true);
        frame.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                System.exit(0);
            }
        });
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new JTableTest();
    }

    /**
     * 处理边个变化的事件函数
     */
    @Override
    public void tableChanged(TableModelEvent e) {
        // TODO Auto-generated method stub
        int row=e.getFirstRow();
        int grade1=((Integer)(my.getValueAt(row, 1))).intValue();
        int grade2=((Integer)(my.getValueAt(row, 2))).intValue();
        int total=grade1+grade2;
        my.mySetValueAt(new Integer(total), row, 3);
        table.repaint();
    }

    /**
     * 使用此内部类来创建一个表格
     * @author Administrator
     *
     */
    class MyTable extends AbstractTableModel{

        Object[][]p=
            {
                {"Tom",new Integer(91),new Integer(1949),new Integer(1910)},
                {"Jack",new Integer(82),new Integer(1969),new Integer(1510)},
                {"Maria",new Integer(47),new Integer(1957),new Integer(1040)},
                {"Jane",new Integer(61),new Integer(1957),new Integer(1180)},
                {"Biao",new Integer(90),new Integer(1987),new Integer(1770)}
                    };
        String[] names={"Name","Age","Birthday","Salary"};

        @Override
        public int getRowCount() {
            // TODO Auto-generated method stub
            return p.length;
        }

        @Override
        public int getColumnCount() {
            // TODO Auto-generated method stub
            return names.length;
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            // TODO Auto-generated method stub
            return p[rowIndex][columnIndex];
        }

        public String geColumnName(int col){
            return names[col];
        }

        public Class getColumnClass(int c){
            return getValueAt(0,c).getClass();
        }

        public boolean isCellEditable(int row,int column){
            return true;
        }

        public void setValueAt(Object value,int row,int column){
            p[row][column]=value;
            fireTableCellUpdated(row, column);
        }

        public void mySetValueAt(Object value,int row,int column){
            p[row][column]=value;
        }
    }

}

我们使用tableChange方法来实现对表格内容改变的侦听。只需要实现相关的方法就可以实现对表格的操作咯。

那么赶紧试试吧。

第二部分:实现对表格内容的增删改

(1)增加行:DefaultModel.addRow(new Vector);//我们可以在Vector内添加具体的内容

(2)删除行:

int rowCount=defaultModel.getRowCount()-1;
if(rowCount>=0){
    defaultModel.removeRow(rowCount);
    defaultModel.setRowCount(rowCount);
}
table.revalidate();//最后这一个方法一定不要忘记,否则可能导致表格内容没有更新。

Java Swing 之JTable及其简单的用法的更多相关文章

  1. java swing 开发 -JTable

    最近利用空闲时间自己琢磨了一下java swing 编程,其实在从事javaweb之前我一直向往的就是java swing 开发,不知道为什么可能当时觉得Windows上的exe程序很是神奇,关于wi ...

  2. java swing 中JTable实现指定单元格为下拉框

    利用自定义的CellEditor实现第四列第二行为下拉框,本列其余行为文本框 利用默认的DefaultCellEditor设置第五列整列为下拉框   package mypackage; import ...

  3. 基于mysql和Java Swing的简单课程设计

    摘要 现代化的酒店组织庞大.服务项目多.信息量大.要想提高效率.降低成本.提高服务质量和管理水平,进而促进经济效益,必须利用电脑网络技术处理宾馆酒店经营数据,实现酒店现代化的信息管理.本次课程设计运用 ...

  4. 模拟java.util.Collection一些简单的用法

    /* 需求:模拟java.util.Collection一些简单的用法! 注意:java虚拟机中并没有泛型类型的对象.泛型是通过编译器执行一个被称为类型擦除的前段转换来实现的. 1)用泛型的原生类型替 ...

  5. Java Swing Graphics Graphics2D的一般用法

    Java Swing Graphics Graphics2D的一般用法: 贝塞尔曲线参考:http://www.zhangxinxu.com/wordpress/2014/06/deep-unders ...

  6. Java Swing实现一个简单而优美的记事本( 较详细注释 )

    Java Swing实现具有基本功能的记事本 目前实现了: 文件 新建 打开 保存 退出前保存询问 编辑 剪切 复制 粘贴 清除 撤销 格式 字体选择 字体颜色选择 帮助 关于 (样式采用了css与h ...

  7. Java Swing简单的加法器

    package test; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class FrameDe ...

  8. learning java swing 基本组件用法

    import javax.swing.*; import java.awt.*; import java.awt.event.ActionListener; import java.awt.event ...

  9. java swing 添加 jcheckbox复选框

    总体上而言,Java Swing编程有两大特点:麻烦.效果差. 麻烦是说由于设计器的使用不方便(如果您希望使用窗体设计器通过快速拖拽控件建立您的Java Swing GUI程序,请您使用MyEclip ...

随机推荐

  1. pycharm 安装与基本设置

    一.下载及安装 打开官网下载:https://www.jetbrains.com/pycharm/download/#section=windows 下载完毕之后可直接双击可执行文件,然后点击&quo ...

  2. ABP文档笔记 - 配置、设置、版本、功能、权限

    配置 全局仅一个单例,保存一组配置信息,一般直接在模块的预启动事件中赋值or修改.没有Scope划分,无论租户还是房东亦或者用户读取的值都不会有差异.每个模块都可以扩展这个配置. 设置 它没有层级关系 ...

  3. JAVA中接口的使用

    抽象类是从多个类中抽象出来的模板,如果将这种抽象进行的更彻底,那么就是接口(interface)了.什么是接口,简单的讲,接口就是抽象类的进一步抽象,这种进一步的抽象只定义了一种规范,而不需要关心具体 ...

  4. Django的配置文件(settings)

    静态文件设置: 一.概述: #静态文件交由Web服务器处理,Django本身不处理静态文件.简单的处理逻辑如下(以nginx为例): # URI请求-----> 按照Web服务器里面的配置规则先 ...

  5. Dapper连接与事务的简单封装

    增删改查方面,已经有Dapper.Extension这么强大的工具了,我也实在没啥好写的,就随手写了个看起来比较优雅的连接与事务的封装.在之后使用Dapper.Extension类库时,完全可以照搬进 ...

  6. Android简易实战教程--第五十话《动画扫描》

    祝新年快乐!2017(一起)前行. 转载博客请注明出处:道龙的博客 本篇简答的小案例,使用动画知识,完成一个类似雷达扫描效果,并且加入自定义进度条.对于自定义进度条前面有很详细的解析和案例了,本篇就结 ...

  7. hive高阶1--sql和hive语句执行顺序、explain查看执行计划、group by生成MR

    hive语句执行顺序 msyql语句执行顺序 代码写的顺序: select ... from... where.... group by... having... order by.. 或者 from ...

  8. Objective-C方法的实现

    Objective-C的方法被两种数据类型描述:一个是选择子(SEL),它用来描述方法的名称;另一个是实现(IMP),它用来描述方法被调用时实际执行的代码(它们基本上只是C函数的指针). 类似于SEL ...

  9. Mybatis源码分析--返回值ResultType和ResultMap

    这一篇博客我们来介绍一下Mybatis执行sql语句返回的结果值的到实体对象的映射机制.首先ResultType和ResultMap的使用方式是不同的. ResultType的使用方式: result ...

  10. 给定一个实数数组,按序排列(从小到大),从数组从找出若干个数,使得这若干个数的和与M最为接近,描述一个算法,并给出算法的复杂度。

    有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M. 需要选出若干个x,使这几个x的和与 M 最接近. 请描述实现算法,并指出算法复杂度. #define M 8 ...