swing中的表格

本文详细介绍了Java Swing中JTable的使用,包括基本表格创建、JScrollPane的运用以显示标题,调整列宽,理解并实现TableModel,结合DAO显示数据库数据,监听选中项变化,以及实现表格数据的添加、验证和选中行的操作。通过实例代码展示了JTable的各种功能和交互设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.基本表格
显示一个Table需要两组数据

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

代码如下:

package gui10;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JTable;

public class test1 {

	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);
	}
}

结果:
在这里插入图片描述
2.JScrollPane
上面看的是没有标题的表格,那么如何才能看到有标题的表格呢?
JScrollPane: 带滚动条的Panel
把table放进去就可以看到table的title

代码如下:

package gui10;
import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class test2 {

	public static void main(String[] args) {
        JFrame f = new JFrame("LoL");
        f.setSize(400, 300);
        f.setLocation(200, 200);
        f.setLayout(new BorderLayout());
 
        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);
        // 根据t创建 JScrollPane
        JScrollPane sp = new JScrollPane(t);
        f.add(sp);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
	}
}

结果:
在这里插入图片描述
和上面的相比,这里的表格多了标题。(这就是使用JScrollPane的区别)

3.列宽
如何来设置表格列的宽度呢?
代码如下:

package gui10;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class test3 {

	public static void main(String[] args) {
		JFrame f = new JFrame("LoL");
        f.setSize(400, 300);
        f.setLocation(200, 200);
        f.setLayout(new BorderLayout());
 
        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);
        JScrollPane sp = new JScrollPane(t);
        t.getColumnModel().getColumn(0).setPreferredWidth(10);
        f.add(sp);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
	}
}

结果:
在这里插入图片描述
和上面的表格相比,这张表格的宽度发生了改变。其实就是多加了:t.getColumnModel().getColumn(0).setPreferredWidth(10);

4.TableModel
这里要介绍一个新概念叫TableModel,这个概念十分重要。

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

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

  1. getRowCount 返回一共有多少行
  2. getColumnCount 返回一共有多少列
  3. getColumnName 每一列的名字
  4. isCellEditable 单元格是否可以修改
  5. getValueAt 每一个单元格里的值

当图形界面需要渲染第一个单元格的数据的时候,就会调用方法TabelModel的getValueAt(0,0) ,把返回值拿到并显示

代码如下:

package gui10;

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() {
    	System.out.println("aaac");
        return heros.length;
    } 
    // 返回一共有多少列
    public int getColumnCount() {
    	System.out.println("aaab");
        return columnNames.length;
    }
    // 获取每一列的名称
    pu
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值