汐ya~ 2023-03-19 23:05 采纳率: 87.8%
浏览 75
已结题

java JTable 如何刷新表格内容

如果点击批准后,表格删除这一行内容呢?
我想要这个小界面点批准后,表格这一行的内容就删除看不见,不知道怎么做

img

package Functional.Teacher;

import info.LeaveData;

import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import java.awt.event.MouseAdapter;
import java.util.List;

import static toolbox.CSVToClass.CSV_to_LeaveData;

public class dataTable {
    public static void showTable( JPanel panel_leave){

        List<LeaveData> dataList = CSV_to_LeaveData(); //读取数据,并转成LeaveData对象列表
        for (int i=0 ;i<dataList.size();i++){ //筛选掉审批过的
            if ((dataList.get(i).getState().equals("请假成功")||dataList.get(i).getState().equals("请假失败")||dataList.get(i).getState().equals("销假成功")||dataList.get(i).getState().equals("销假失败"))){
                dataList.remove(i);
                i--;
            }
        }

        String[] columnName = new String[]{"编号", "姓名","学号","班级","开始时间" ,"结束时间", "申请状态", "申请理由"};
        String[][] columnDate = new String[dataList.size()][];
        for (int i =0;i<dataList.size();i++){
            LeaveData d = dataList.get(i);
            columnDate[i] = new String[]{d.getNum(),d.getName(),d.getID(),d.getClassName(),d.getStartTime(),d.getEndEime(),d.getState(),d.getReason()};
        }

        DefaultTableModel dtm = new DefaultTableModel(columnDate, columnName);
        JTable jtable = new JTable(dtm) {
            //可选择表格行,但不可编辑
            public boolean isCellEditable(int row, int column) {
                return false;
            }
        };
        jtable.setShowVerticalLines(false); //去掉竖线
        DefaultTableCellRenderer r = new DefaultTableCellRenderer(); //此三行 内容居中
        r.setHorizontalAlignment(JLabel.CENTER);
        jtable .getTableHeader().setReorderingAllowed(false);//  表头不可拖动
        jtable.setDefaultRenderer(Object.class, r);
        JScrollPane scrollPane = new JScrollPane(); //直接添加容器,表头不显示
        scrollPane.setBounds(10, 70, 620, 400);
        panel_leave.add(scrollPane);
        scrollPane.setViewportView(jtable);

        //给table加上一个鼠标事件监听器对象
        jtable.addMouseListener(new MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent e) {
                //是否左建双击
                if (e.getClickCount() == 2 && SwingUtilities.isLeftMouseButton(e)) {
                    //添加双击后的
                    int count = jtable.getSelectedRow();//获取你选中的行号
                    new TeacherReviewFrame(dataList.get(count));


                }
            }

        });
    }
}


  • 写回答

4条回答 默认 最新

  • MarkHan_ 2023-03-19 23:19
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    要删除 JTable 中选中的行,需要进行以下步骤:

    1. 获取 JTable 的数据模型 DefaultTableModel。
    2. 获取 JTable 的选中行号。
    3. 通过 DefaultTableModel 的 removeRow() 方法删除选中的行。
    4. 调用 JTable 的 updateUI() 方法刷新表格。

    可以在 TeacherReviewFrame 界面中添加一个 “批准” 按钮,并为其添加一个 ActionListener 监听器。在监听器中,可以实现以上步骤来删除选中的行。具体实现如下:

    public class TeacherReviewFrame extends JFrame {
    
        private LeaveData data;
    
        public TeacherReviewFrame(LeaveData data) {
            this.data = data;
            // ...
        }
    
        // ...
    
        private void initButton() {
            JButton btnApprove = new JButton("批准");
            btnApprove.setBounds(20, 250, 80, 30);
            btnApprove.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    int[] rows = jtable.getSelectedRows(); // 获取选中行号
                    DefaultTableModel model = (DefaultTableModel) jtable.getModel(); // 获取表格数据模型
                    for (int i = rows.length - 1; i >= 0; i--) {
                        model.removeRow(rows[i]); // 删除选中行
                    }
                    jtable.updateUI(); // 刷新表格
                    // TODO: 在这里添加将批准信息写入文件的代码
                }
            });
            add(btnApprove);
        }
    }
    
    

    需要注意的是,以上代码只是在表格中删除选中行,而没有将批准的信息写入文件或数据库中,需要根据实际需求进行相应的修改。

    评论
  • threenewbee 2023-03-19 23:17
    关注
    评论
  • 关注
    //这里根据你的操作重新获取tableModel 
    TableModel tableModel = new DefaultTableModel(columnData, columnName);
    //然后把它放在table里,就刷新了
    table.setModel(tableModel);
    
    
    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-03-22 23:15
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月23日
  • 创建了问题 3月19日

悬赏问题

  • ¥20 matlab报错,vflux计算潜流通量
  • ¥15 自己编写函数strlen(), strcpy(), strcmp(), strcat(), 没有编写main(),为什么测评结果都是错的,哪里出了问题
  • ¥15 我该如何实现鼠标按下GUI按钮时就执行按钮里面的操作的方法
  • ¥15 关于#硬件工程#的问题:我这边有个锁相环电路没有效果
  • ¥15 20款 27寸imac苹果一体机装win10后,蓝牙耳机和音响放歌曲卡顿断断续续.
  • ¥15 求解icon library .icl图标库文件
  • ¥15 VB.NET 父窗体调取子窗体报错
  • ¥15 python海龟作图如何改代码使其最后画出来的是一个镜像翻转的图形
  • ¥15 我不明白为什么c#微软的官方api浏览器为什么不支持函数说明的检索,有支持检索函数说明的工具吗?
  • ¥15 在我想检测ros是否成功安装时输入roscore出现以下