当前位置: 首页 > news >正文

JTable详细介绍

目录

一、基本表格

二、修改列宽并显示列的名称

三、使用AbstractTableModel抽象类存储数据


 

一、基本表格

显示一个Table需要两组数据
1. 一维数组: String[]columnNames 表示表格的标题
2. 二维数组: String[][] heros 表格中的内容
默认情况下,表格的标题是不会显示出来了,除非使用了JScrollPane 


 
import javax.swing.JFrame;
import javax.swing.JTable;
 
public class TestGUI {
    public static void main(String[] args) {
 
        JFrame f = new JFrame("LoL");
        f.setSize(400, 300);
        f.setLocation(200, 200);
        f.setLayout(new BorderLayout());
 
        // 表格上的title
        String[] columnNames = new String[] { "id", "name", "hp", "damage" };
        // 表格中的内容,是一个二维数组
        String[][] heros = new String[][] { 
        	{ "1", "盖伦", "616", "100" },
            { "2", "提莫", "512", "102" }, 
            { "3", "奎因", "832", "200" } };
        JTable t = new JTable(heros, columnNames);
        
        f.add(t, BorderLayout.CENTER);
 
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        f.setVisible(true);
    }
}

二、修改列宽并显示列的名称

 

修改列宽很简单,主要是调用Jtable类当中的API

t.getColumnModel().getColumn(0).setPreferredWidth(10);

想要显示列名需要使用JScrollPane组件,注意点就是使用Jtable对象新建一个JScrollPane组件,并且将JScrollPane添加到顶层容器Frame中。(注意不要再添加Jtable对象了)

 JScrollPane sp = new JScrollPane(t);
        
 f.add(sp, BorderLayout.CENTER);

三、使用AbstractTableModel抽象类存储数据

首先说下TableModel的设计思想,在Model这种思想的指导下,数据和显示分离开来了。 比如对于JTable而言,有数据部分,也有显示部分(比如列宽等信息)。 数据部分,专门做一个类,叫做TableModel,就用于存放要显示的数据。

使用TableModel的方式存放Table需要显示的数据,HeroTableModel 继承AbstractTableModel ,进而实现了接口TableModel,在HeroTableModel 中提供一个table显示需要的所有信息

  1. getRowCount 返回一共有多少行
  2. getColumnCount 返回一共有多少列
  3. getColumnName 每一列的名字
  4. isCellEditable 单元格是否可以修改
  5. getValueAt 每一个单元格里的值
import javax.swing.table.AbstractTableModel;
 
public class HeroTableModel extends AbstractTableModel {
 
    String[] columnNames = new String[] { "id", "name", "hp", "damage" };
    String[][] heros = new String[][] { { "1", "盖伦", "616", "100" },
            { "2", "提莫", "512", "102" }, { "3", "奎因", "832", "200" } };
 
    // 返回一共有多少行
    public int getRowCount() {
        // TODO Auto-generated method stub
        return heros.length;
    }
 
    // 返回一共有多少列
    public int getColumnCount() {
        // TODO Auto-generated method stub
        return columnNames.length;
    }
 
    // 获取每一列的名称
    public String getColumnName(int columnIndex) {
        // TODO Auto-generated method stub
        return columnNames[columnIndex];
    }
 
    // 单元格是否可以修改
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }
 
    // 每一个单元格里的值
    public Object getValueAt(int rowIndex, int columnIndex) {
        // TODO Auto-generated method stub
        return heros[rowIndex][columnIndex];
    }
 
}

实际上,我们之前新建的JTable是使用如下形式的构造方法:

JTable(Object[][] rowData, Object[] columnNames) 

如图所示,在JTable的的源代码中,它就会根据rowData和columnNames去创建一个TableModel对象。

相关文章:

  • 前端Gitee + Jenkins自动化实战(转)
  • Grafana安装与配置
  • 加固技术护城河,比亚迪商用车加速领跑全球电动化进程
  • Ubuntu记住git账号密码
  • SpringBoot系列之基于MongoRepository实现分页
  • 【Python恶搞】Python实现祝福单身狗的恶搞项目,快@你的好朋友,祝福他吧 | 附源码
  • [附源码]JAVA毕业设计师生交流平台(系统+LW)
  • 关于海量级存储用户标签体系架构
  • Maven是什么?手把手先创建个Maven项目
  • 通过Node + SSE 做了一个构建日志推送
  • 作为技术面试官,考什么前端知识点(一)
  • java-net-php-python-springbot学生奖惩管理系统计算机毕业设计程序
  • Vue按钮(Button)
  • Spring Boot使用宝兰德BES进行改造和部署
  • 全国青少年软件编程等级考试Python标准解读(1_6级)
  • 第五章 使用管理门户监控 - 监控日志
  • SpringBoot微服务的发布与部署(3种方式)
  • “无所不能”的 ChatGPT,正准备把各行各业打得满地找牙
  • Day20 | 每天五道题
  • 我的学校网页期末作业(纯html+css实现)
  • 异步编程实践
  • Go XORM学习
  • 【golang/go语言】go语言中包的使用、Init()函数、协程和接口
  • 【电源专题】JEITA学习
  • cadence SPB17.4 S032 - PSpice - 仿真元件参数的含义 - 以VSIN为例
  • 印刷线路板焊盘和金手指自动光学检测研究
  • 算法刷题打卡第81天:兼具大小写的最好英文字母
  • 【MySQL】MyCAT三大配置文件详解(MySQL专栏启动)
  • go-zero源码阅读-布隆过滤器
  • 数组试题(Python实现)
  • 2023年重庆高考588分能报什么大学 588分能上哪些院校
  • 2023年山东春季高考考试时间 什么时候考试
  • 单招被调剂可以不去吗 还能高考吗
  • 2023湖南双一流大学名单 湖南哪所学校好
  • 中专考大学要考什么科目 内容有哪些
  • 预计2023国家专项计划录取分数线是多少
  • 2021年浙江工商大学杭州商学院学费是多少 各专业收费标准
  • 神经科学专业课程有哪些
  • 2023软件工程专业课程有哪些 就业方向是什么
  • 现在进行时结构是什么 怎么构成的