JTable 的使用方法

时间:2022-05-30 08:03:40

javax.swing.JTable类是java提供给用户创建表格的,使用它可以快捷的实现很多功能,比如直观的展现一个班所有的学生信息等。

用法:

        在创建窗口的方法里直接创建JTable的对象JTable table = new JTable(model);

model是一个类,这个类实现了TableModel接口,

通过重写其中的方法可以设置表格的各种属性,所以在创建JTable之前还要加上 Model model=new Model();

Model 类的内容会在下面给出。

当然我在网上看到有很多没用TabelModel的代码,发现其代码不是那么直观,所以我更倾向于使用TableModel,

好处就是操作起来方便,代码更清晰。

至于TabelModel中的方法该怎么重写我会在代码注释中会给出,就不赘述了。

源代码:

import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;

public class Model implements TableModel {
    // 创建数组用于单元格中显示的内容
    String[][] values = new String[3][20];

    /**
     * 初始化数组内容
     */
    public void setValues() {
        values[0][0] = "小明";
        values[1][0] = "20150809";
        values[2][0] = "男";
        for (int i = 1; i < 20; i++) {
            values[0][i] = "没有数据";
        }
    }

    @Override
    public int getRowCount() {
        // 设置总行数
        return 20;
    }

    @Override
    public int getColumnCount() {
        // 设置总列数
        return 3;
    }

    @Override
    public String getColumnName(int columnIndex) {
        // 设置单元格列属性(表头名)
        if (columnIndex == 0) {
            return "姓名";
        } else if (columnIndex == 1) {
            return "学号";
        } else if (columnIndex == 2) {
            return "性别";
        } 
            return null;
    }

    /**
     * 设置每列数据类型
     */
    @Override
    public Class<?> getColumnClass(int columnIndex) {
        if(columnIndex==0){
            return String.class;
        }else if(columnIndex == 1){
            return String.class;
        }else if(columnIndex==2){
            return String.class;
        }        return null;
    }

    /**
     * 设置单元格是否允许编辑
     */
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }

    /**
     * 设置单元格数据内容
     */
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        setValues();
        return values[columnIndex][rowIndex];
    }

    /**
     * 设置单元格的值
     */
    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {

    }

    @Override
    public void addTableModelListener(TableModelListener l) {
        // 此方法可给表格添加监听
    }

    @Override
    public void removeTableModelListener(TableModelListener l) {
        // 此方法可给表格移除监听
    }

}

主类:

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

public class Manager {

    /**
     * @param JTable使用示例
     */
    public static void main(String[] args) {
        new Manager().showFrame();
    }

    public void showFrame() {
        // 设置窗体属性
        JFrame frame = new JFrame("JTable");
        frame.setLayout(new BorderLayout());
        frame.setSize(300,400);
        frame.setDefaultCloseOperation(3);
        frame.setLocationRelativeTo(null);

        // 创建表格和设置表格格式的类
        Model model = new Model();
        JTable table = new JTable(model);
//将表格加入滚动面板便于显示
JScrollPane jscroll = new JScrollPane(table); // 创建自动排序的对象,点击表头可自动对表格进行排序 RowSorter<TableModel> rs = new TableRowSorter<TableModel>(model); table.setRowSorter(rs); frame.add(jscroll, BorderLayout.CENTER); frame.setVisible(true); } }