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