Java Swing JTable:表格

1 JTable:表格

表格是 Swing 新增加的组件,主要功能是把数据以二维表格的形式显示出来,并且允许用户对表格中的数据进行编辑。表格组件是最复杂的组件之一,它的表格模型功能非常强大、灵活而易于执行。Swing 使用 JTable 类实现表格。

1.2 JTable 构造函数

JTable():构造一个默认的 JTable,使用默认的数据模型、默认的列模型和默认的选择模型对其进行初始化。
JTable(int numRows,int numColumns):使用 DefaultTableModel 构造具有 numRows 行和 numColumns 列个空单元格的 JTable。
JTable(Object[][] rowData,Object[] columnNames):构造一个 JTable 来显示二 维数组 rowData 中的值,其列名称为 columnNames。

创建一个带有滚动条的 JTable 对象非常简单,如下所示

JTable table=new JTable(5,6);
JScrollPane pane=new JScrollPane(table);

第一条语句创建了一个 JTable 对象。第二条语句创建了一个存放 JTable 对象的 JScrollPane 对象,该对象是一个视图对象。JScrollPane是一个垂直和水平滚动条,以及可设置行和列标题的容器。上面两行代码执行后的表格效果如图所示:
在这里插入图片描述

1.3 JTable 常用方法

getColumnCount()	返回列模型中的列数
getColumnN ame(int column)	返回出现在视图中 column 列位置处的列名称
getRowCount()	返回 JTable 中可以显示的行数(给定无限空间)
getRowSorter()	返回负责排序的对象
getSelectedColumn()	返回第一个选定列的索引,如果没有选定的列, 则返回 -1
getSelectedRow()	返回第一个选定行的索引,如果没有选定的行, 则返回 -1
getValueAt(int row,int column)	返回 row 和 column 位置的单元格值
isEditing()	如果正在编辑单元格,则返回 true
selectAll()	选择表中的所有行、列和单元格
setColumnSelectionInterval(int index0,int index1)	选择从 index0 到 index1之间(包含两端)的列
setRowSelectionInterval(int index0,int index1)	选择从 index0 到 index1 之间(包含两端)的行
setTableHeader(JTableHeader tableHeader)	将此 JTable 所使用的 tableHeader 设置为 newHeader
setUpdateSelectionOnSort(boolean update)	指定排序后是否应该更新选择
setValueAt(Object a Value,int row,int column)	设置表模型中 row 和 column 位置的单元格值

1.4 示例1

import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class JTableDemo
{
    public static void main(String[] agrs)
    {
        JFrame frame=new JFrame("学生成绩表");
        frame.setSize(500,200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container contentPane=frame.getContentPane();
        Object[][] tableDate=new Object[5][8];
        for(int i=0;i<5;i++)
        {
            tableDate[i][0]="1000"+i;
            for(int j=1;j<8;j++)
            {
                tableDate[i][j]=0;
            }
        }
        String[] name={"学号","软件工程","Java","网络","数据结构","数据库","总成绩","平均成绩"};
        JTable table=new JTable(tableDate,name);
        contentPane.add(new JScrollPane(table));
        frame.setVisible(true);
    }
}

在这里插入图片描述

1.5 示例2

Swing 中表格的数据可以根据需求动态变化,比如对于表格中不需要的数据,可以将其删除。本实例将演示如何从表格中删除用户选择的行,实现过程如下。

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
public class RowDeleteDemo extends JFrame
{
    private JPanel contentPane;
    private JTable table;
    /**
     * Launch the application.
     */
    public static void main(String[] args)
    {
        RowDeleteDemo frame = new RowDeleteDemo();
        frame.setVisible(true);
    }
    /**
     * Create the frame.
     */
    public RowDeleteDemo()
    {
        addWindowListener(new WindowAdapter()
        {
            @Override
            public void windowActivated(WindowEvent e)
            {
                do_this_windowActivated(e);
            }
        });
        setTitle("图书信息表");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100,100,450,200);
        contentPane=new JPanel();
        contentPane.setBorder(new EmptyBorder(5,5,5,5));
        contentPane.setLayout(new BorderLayout(0,0));
        setContentPane(contentPane);
        JPanel panel=new JPanel();
        contentPane.add(panel,BorderLayout.SOUTH);
        JButton button=new JButton("删除");
        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                do_button_actionPerformed(e);
            }
        });
        panel.add(button);
        JScrollPane scrollPane=new JScrollPane();
        contentPane.add(scrollPane,BorderLayout.CENTER);
        table=new JTable();
        table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        scrollPane.setViewportView(table);
    }

    protected void do_this_windowActivated(WindowEvent e)
    {
        DefaultTableModel tableModel=(DefaultTableModel) table.getModel();    //获得表格模型
        tableModel.setRowCount(0);    //清空表格中的数据
        tableModel.setColumnIdentifiers(new Object[]{"书名","出版社","出版时间","丛书类别","定价"});    //设置表头
        tableModel.addRow(new Object[]{"Java从入门到精通(第2版)","清华大学出版社","2010-07-01","软件工程师入门丛书","59.8元"});    //增加列
        tableModel.addRow(new Object[]{"PHP从入门到精通(第2版)","清华大学出版社","2010-07-01","软件工程师入门丛书","69.8元"});
        tableModel.addRow(new Object[]{"Visual Basic从入门到精通(第2版)","清华大学出版社","2010-07-01","软件工程师入门丛书","69.8元"});
        tableModel.addRow(new Object[]{"Visual C++从入门到精通(第2版)","清华大学出版社","2010-07-01","软件工程师入门丛书","69.8元" });
        table.setRowHeight(30);
        table.setModel(tableModel);    //应用表格模型
    }

    protected void do_button_actionPerformed(ActionEvent e)
    {
        DefaultTableModel model=(DefaultTableModel) table.getModel();    //获得表格模型
        int[] selectedRows=table.getSelectedRows();
        for(int i=selectedRows[0];i<selectedRows.length;i++)
        {
            model.removeRow(selectedRows[0]);
        }
        table.setModel(model);
    }
}

运行效果如下:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书香水墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值