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

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

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

    评论

报告相同问题?

问题事件

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

悬赏问题

  • ¥18 深度学习tensorflow1,ssdv1,coco数据集训练一个模型
  • ¥100 关于注册表摄像头和麦克风的问题
  • ¥30 代码本地运行正常,但是TOMCAT部署时闪退
  • ¥15 关于#python#的问题
  • ¥15 主机可以ping通路由器但是连不上网怎么办
  • ¥15 数据库一张以时间排好序的表中,找出多次相邻的那些行
  • ¥50 关于DynamoRIO处理多线程程序时候的问题
  • ¥15 kubeadm部署k8s出错
  • ¥15 Abaqus打不开cae文件怎么办?
  • ¥15 小程序准备上线,软件开发公司需要提供哪些资料给甲方