Java程序员_编程开发学习笔记_网站安全运维教程_渗透技术教程

Java Swing 表格行增删实战解析:JTable与事件监听的综合应用

阿贵
6天前发布 /正在检测是否收录...
温馨提示:
本文最后更新于2025年08月31日,已超过6天没有更新,若内容或图片失效,请留言反馈。

Java Swing 表格行增删实战解析:JTable与事件监听的综合应用

63.png

一、原题完整代码呈现

以下是计算机二级Java考试中关于Swing表格组件(JTable)的典型题型,主要考察接口实现、构造方法、事件绑定、容器获取、窗口标题设置及鼠标监听,包含6处需要填写的空白(标记为//*********Found********):

import java.awt.*;
import java.awt.event.*;
import java.util.Vector;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

//*********Found********
public class Java_2 ______________ ActionListener{
    JTable table = null;
    DefaultTableModel defaultModel = null;
    
        //*********Found********
        public __________(){
        JFrame f = new JFrame();
        String[] name = {"字段 1","字段 2","字段 3","字段 4","字段 5"};
        String[][] data = new String[5][5];        
                int value =1;
        for(int i=0; i<data.length; i++){
            for(int j=0; j<data.length ; j++)
                data[i][j] = String.valueOf(value++);
        }        
        defaultModel = new DefaultTableModel(data,name);
        table=new JTable(defaultModel);
        table.setPreferredScrollableViewportSize(new Dimension(400, 80));
        JScrollPane s = new JScrollPane(table);

        JPanel panel = new JPanel();
        JButton b = new JButton("增加行");
        panel.add(b);
    
        //*********Found********
            b.______________(this);
        b = new JButton("删除行");
        panel.add(b);
        b.addActionListener(this);
    
        //*********Found********
                Container contentPane = f._______________();
        contentPane.add(panel, BorderLayout.NORTH);
        contentPane.add(s, BorderLayout.CENTER);

        //*********Found********
        f.______________("增删表格行");
        f.pack();
        f.setVisible(true);

        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                    System.exit(0);
            }
        });
        //*********Found********
        table.______________(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                if(table.isCellSelected(table.getSelectedRow(), table.getSelectedColumn())){
                    int selRow=table.getSelectedRow();
                    int selCol=table.getSelectedColumn();
                JOptionPane.showMessageDialog(null, 
                        "位于 ("+selRow+","+selCol+")的元素: "+table.getValueAt(selRow,selCol), 
                        "PLAIN_MESSAGE", JOptionPane.PLAIN_MESSAGE);
                }
                }
           });
    }
    public void actionPerformed(ActionEvent e){
        if(e.getActionCommand().equals("增加行"))    
            defaultModel.addRow(new Vector());
        if(e.getActionCommand().equals("删除行")){
            int rowcount = defaultModel.getRowCount()-1; //getRowCount返回行数,rowcount<0代表已经没有任何行了。
            if(rowcount >= 0){
                defaultModel.removeRow(rowcount);                
                defaultModel.setRowCount(rowcount);
            }
        }        
        table.revalidate();
    }

    public static void main(String[] args) {
        new Java_2();
    }
}

二、空白处逐一解析与解答

1. 第一处空白:实现动作监听接口

答案:implements

//*********Found********
public class Java_2 implements ActionListener{

解析
类中定义了actionPerformed(ActionEvent e)方法,用于处理按钮点击事件,这要求类必须实现ActionListener接口。Java中实现接口的关键字是implements,因此填写implements

2. 第二处空白:定义构造方法

答案:Java_2

//*********Found********
public Java_2(){

解析
构造方法是类的特殊方法,用于初始化对象,名称必须与类名完全一致(包括大小写)。当前类名为Java_2,因此构造方法名应为Java_2,填写Java_2

3. 第三处空白:绑定按钮动作监听器

答案:addActionListener

//*********Found********
b.addActionListener(this);

解析
JButton需要通过addActionListener()方法绑定监听器,以响应点击事件。当前类实现了ActionListener接口,this表示当前对象,因此调用该方法将监听器与按钮关联,填写addActionListener

4. 第四处空白:获取窗口内容面板

答案:getContentPane

//*********Found********
Container contentPane = f.getContentPane();

解析
JFrame的内容面板(ContentPane)是添加组件的容器,通过getContentPane()方法获取。组件需添加到内容面板而非直接添加到JFrame,因此填写getContentPane

5. 第五处空白:设置窗口标题

答案:setTitle

//*********Found********
f.setTitle("增删表格行");

解析
JFramesetTitle(String title)方法用于设置窗口标题栏的文本。题目要求窗口标题为“增删表格行”,因此填写setTitle

6. 第六处空白:为表格添加鼠标监听器

答案:addMouseListener

//*********Found********
table.addMouseListener(new MouseAdapter() {

解析
JTable需要通过addMouseListener()方法绑定鼠标监听器,以响应鼠标点击事件。MouseAdapter是鼠标监听器接口的适配器类,便于实现所需方法,因此填写addMouseListener

三、完整正确代码

四、程序功能与运行说明

程序功能

该程序实现一个带表格的图形界面应用,核心功能包括:

  1. 显示一个5x5的表格(初始数据为1-25的连续数字)
  2. 提供“增加行”按钮:在表格末尾添加一行空数据
  3. 提供“删除行”按钮:删除表格最后一行数据
  4. 表格交互:点击任意单元格,弹出对话框显示该单元格的位置(行、列索引)及内容
运行说明
  1. 程序启动后,显示标题为“增删表格行”的窗口:

    • 北部(顶部):包含“增加行”和“删除行”两个按钮的面板
    • 中央区域:带滚动条的表格(初始显示5行5列数据,值为1-25)
  2. 操作流程:

    • 点击“增加行”:表格末尾新增一行空行
    • 点击“删除行”:删除表格最后一行(若表格不为空)
    • 点击表格任意单元格:弹出对话框,显示格式如“位于 (0,1)的元素:2”(行、列索引从0开始)
  3. 退出方式:点击窗口右上角关闭按钮,程序终止运行

五、核心知识点总结

  1. JTable与数据模型

    • 表格模型:DefaultTableModelJTable的默认数据模型,通过new DefaultTableModel(data, name)初始化(data为二维数组数据,name为列名数组)
    • 表格创建:JTable table = new JTable(defaultModel)将表格与数据模型关联
    • 滚动支持:JScrollPane s = new JScrollPane(table)为表格添加滚动条,适应数据量超过显示区域的情况
  2. 接口实现与事件监听

    • 动作监听:public class Java_2 implements ActionListener使类具备处理按钮点击事件的能力,通过actionPerformed(ActionEvent e)方法实现具体逻辑
    • 事件绑定:b.addActionListener(this)将按钮与当前类绑定,按钮点击时触发actionPerformed方法
    • 命令识别:e.getActionCommand().equals("增加行")通过按钮文本区分不同按钮的事件
  3. 容器与布局管理

    • 内容面板:f.getContentPane()获取JFrame的内容容器,所有组件需添加到该面板
    • 布局管理器:使用BorderLayout(默认布局),按钮面板放在北部(BorderLayout.NORTH),表格放在中央(BorderLayout.CENTER
    • 窗口设置:f.pack()自动调整窗口大小以适应组件,f.setVisible(true)使窗口可见
  4. 鼠标监听与交互反馈

    • 鼠标监听:table.addMouseListener(new MouseAdapter())为表格添加鼠标监听器,MouseAdapter简化了接口实现(只需重写所需方法)
    • 单元格选择:table.getSelectedRow()table.getSelectedColumn()获取选中单元格的行、列索引
    • 反馈对话框:JOptionPane.showMessageDialog(...)弹出信息对话框,显示单元格位置和内容
  5. 表格行操作

    • 增加行:defaultModel.addRow(new Vector())通过数据模型向表格添加空行
    • 删除行:defaultModel.removeRow(rowcount)删除指定行(此处删除最后一行)
    • 刷新表格:table.revalidate()通知表格数据模型已更新,刷新显示

六、常见错误与应试技巧

  1. 常见错误分析

    • 第一处空白接口实现错误:写成extends ActionListener(接口不能继承,只能实现)或拼写错误(如implemets
    • 第二处空白构造方法错误:写成Java2(类名不符)或java_2(大小写错误),导致无法初始化对象
    • 第三处空白事件绑定错误:写成addActionLister(拼写错误)或addListener(方法名错误),按钮点击无响应
    • 第四处空白内容面板错误:写成getContentPane()以外的方法(如getPanel()),无法正确获取容器
    • 第五处空白标题设置错误:写成setTitle()以外的方法(如setName()),窗口标题不生效
    • 第六处空白鼠标监听错误:写成addMouseListener()以外的方法(如addClickListener()),表格点击无响应
  2. 应试技巧

    • 接口与类关系:"接口用implements实现,类用extends继承"
    • 事件监听三步:"实现接口→绑定监听器→重写处理方法"
    • 表格操作核心:"通过DefaultTableModel操作行,而非直接操作JTable"
    • 布局管理原则:"组件添加到ContentPane,BorderLayout分区域放置"
    • 调试技巧:输出按钮命令(e.getActionCommand())或单元格索引,验证事件是否正确触发

通过本题,我们掌握了JTable的创建与数据模型绑定、按钮事件与鼠标事件的处理、表格行的动态增删及交互反馈的实现。表格组件是数据展示的核心控件,在管理系统、数据报表等场景中广泛应用,理解表格与事件监听的结合方式,对开发交互式桌面应用具有重要意义。

喜欢就支持一下吧
点赞 0 分享 收藏
评论 抢沙发
OωO
取消 登录评论