SWING 中删除JTable中的记录。并进度条显示当前删除进度,和删除记录数。可以随时停止删除操作

import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;


/**
 * 删除表格中的记录。并记录单前删除进度条,和删除记录数。可以随时停止删除操作
 * @author xzq
 *
 */
public class RemoveRows {
 JTable table = null;

 DefaultTableModel defaultModel = null;

 private Simulated activity;

 private JProgressBar progressBar;

 private Timer activityMonitor;

 private JTextField textArea;

 private String number = "0";

 private JButton startButton;

 private JButton stopButton;

 public int temp = 0;

 public RemoveRows() {
  JFrame f = new JFrame();
  String[] name = { "字段 1", "字段 2", "字段 3", "字段 4", "字段 5" };
  String[][] data = new String[20000][5];
  int value = 1;
  for (int i = 0; i < data.length; i++) {
   for (int j = 0; j < data[i].length; j++)
    data[i][j] = String.valueOf(value++);
  }
  progressBar = new JProgressBar();
  progressBar.setStringPainted(true);

  textArea = new JTextField("                   ", 10);
  defaultModel = new DefaultTableModel(data, name);
  table = new JTable(defaultModel);
  table.setPreferredScrollableViewportSize(new Dimension(400, 600));
  JScrollPane s = new JScrollPane(table);

  JPanel panel = new JPanel();
  startButton = new JButton("Start");
  stopButton = new JButton("Stop");
  panel.add(startButton);
  panel.add(stopButton);
  panel.add(progressBar);
  panel.add(textArea);
  startButton.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {

    int[] rows = table.getSelectedRows();

    int[] columns = table.getSelectedColumns();

    number = String.valueOf(rows.length);

    //设置滚动的最大长度
    progressBar.setMaximum(rows.length);
    
    //创建记数器对象
    activity = new Simulated(rows.length);
    
    //启动记数器对象
    activity.start();
    
    //启动定时器
    activityMonitor.start();

    startButton.setEnabled(false);

    table.revalidate();
   }
  });

  Container contentPane = f.getContentPane();
  contentPane.add(panel, BorderLayout.NORTH);
  contentPane.add(s, BorderLayout.CENTER);

  f.setTitle("AddRemoveCells");
  f.pack();
  f.setVisible(true);

  f.addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent e) {
    System.exit(0);
   }
  });

  //启动定时器删除行记录
  activityMonitor = new Timer(100, new ActionListener() {
   public void actionPerformed(ActionEvent event) {
    
    //获得当前删除的记录数
    int current = activity.getCurrent();
    
    //设置滚动条记录数
    progressBar.setValue(current);

    textArea.setText("");
    
    //在文本域中设置当前的记录数
    textArea.setText(String.valueOf(current) + "/" + number);

    int num = Integer.parseInt(number);
    int rowcount = -1;

    //删除后,必须要把单前的记录条数减删除的条数
    rowcount = num - temp;

    if (rowcount >= 0) {
     
     //具体的删除动作,删除指点的那条记录
     defaultModel.removeRow(rowcount);
     defaultModel.setRowCount(defaultModel.getRowCount());// 删除行比较简单,只要用DefaultTableModel的removeRow()方法即可。删除
     // 行完毕后必须重新设置列数,也就是使用DefaultTableModel的setRowCount()方法来设置。
    }

    //判断是否全部删除,如果全部删除则停止该定时器
    if (current == activity.getTarget()) {
     activityMonitor.stop();
    }
    temp++;
   }
  });

  stopButton.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent event) {
    activityMonitor.stop();
    startButton.setEnabled(true);
   }
  });
 }

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

class Simulated extends Thread {
 public Simulated(int t) {
  current = 0;
  target = t;
 }

 public int getTarget() {
  return target;
 }

 public int getCurrent() {
  return current;
 }

 public void run() {
  while (current < target && !interrupted()) {
   try {
    sleep(100);
   } catch (InterruptedException e) {
    return;
   }
   current++;
  }
 }

 private int current;

 private int target;
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值