需要确定SwingWorker完成以停止当前进程?

时间:2011-11-24 07:07:04

标签: java swing

我的目标是选择所有以MANI.txt命名的文件,这些文件存在于各自的文件夹中,然后加载MANI.txt文件中不同位置的路径。在我加载表中的路径后,我习惯选择所需的路径并修改它们。

要加载MANI.txt文件需要更多时间,因为它可能会在我的工作空间等中出现超过30次,直到加载文件我想在ProgessBar的帮助下向用户发出警报。一旦列表大小有已填充我需要禁用ProgressBar。

我提出了这个ProgressBar,但进度条操作是否完成,如果后台进程(查找文件并将其路径放在表中)完成意味着,结果显示并隐藏进度条?我希望在任何一种情况下,进度条操作的存在都会100%完成吗?请给我一些想法?如何实施?

 import java.awt.*;
 import javax.swing.*;
 import javax.swing.table.*;
 import java.awt.event.*;
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.PrintWriter;


 public class JTableHeaderCheckBox extends JFrame implements ActionListener {
protected int counter = 0;
Object colNames[] = { "", "Path" };
Object[][] data = {};
DefaultTableModel dtm;
JTable table;
JButton but;
java.util.List list;
File folder;
JProgressBar current;
JFrame fr1, frame;
int num = 0;
JProgressBar pbar;
JTableHeaderCheckBox it;


   public void buildGUI() throws InterruptedException {
    dtm = new DefaultTableModel(data, colNames);
    table = new JTable(dtm);
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

    int vColIndex = 0;
    TableColumn col = table.getColumnModel().getColumn(vColIndex);
    int width = 10;
    col.setPreferredWidth(width);
    int vColIndex1 = 1;
    TableColumn col1 = table.getColumnModel().getColumn(vColIndex1);
    int width1 = 500;
    col1.setPreferredWidth(width1);
    JFileChooser chooser = new JFileChooser();
    // chooser.setCurrentDirectory(new java.io.File("."));
    chooser.setDialogTitle("Choose workSpace Path");
    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    chooser.setAcceptAllFileFilterUsed(false);
    if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
                                                                        {
                }
    String path = chooser.getSelectedFile().getAbsolutePath();
    folder = new File(path);
    but = new JButton("REMOVE");

    SwingWorker worker = new SwingWorker() {

        @Override
        public Object doInBackground() {
            GatheringFiles ob = new GatheringFiles();
            list = ob.returnlist(folder);

            return list;
        }

        @Override
        protected void done() {
            // java.util.List list = (java.util.List)get();

            for (int x = 0; x < list.size(); x++) {
                dtm.addRow(new Object[] { new Boolean(false),
                        list.get(x).toString() });
            }
            try {
                JPanel pan = new JPanel();
                JScrollPane sp = new JScrollPane(table);
                TableColumn tc = table.getColumnModel().getColumn(0);
                tc.setCellEditor(table.getDefaultEditor(Boolean.class));
                tc.setCellRenderer(table.getDefaultRenderer(Boolean.class));
                tc.setHeaderRenderer(new CheckBoxHeader(
                        new MyItemListener()));

                JFrame f = new JFrame();
                pan.add(sp);
                pan.add(but);
                f.add(pan);
                f.setSize(700, 100);
                f.pack();
                f.setLocationRelativeTo(null);
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setVisible(true);

                if (list.size() >= 0) {
                    // hide the progress bar
                    frame.hide();

                }
            } catch (Exception ex) {
            }


        }
    };

    worker.execute();
    but.addActionListener(this);
    //calling progressbar
    if(!path.isEmpty())
    {
    SwingProgressBar();
    }

}

public void SwingProgressBar() {
    UIManager.put("ProgressBar.selectionBackground", Color.black);
    UIManager.put("ProgressBar.selectionForeground", Color.white);
    UIManager.put("ProgressBar.foreground", new Color(8, 32, 128));

    pbar = new JProgressBar();
    pbar.setMinimum(0);
    pbar.setMaximum(100);
    pbar.setForeground(Color.RED);
    pbar.setStringPainted(true);

    it = new JTableHeaderCheckBox();
    frame = new JFrame("Loading");
    final JLabel lb = new JLabel("0");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // frame.setContentPane(it);

    frame.add(pbar);
    frame.pack();
    frame.setVisible(true);
    counter = 0;
    Thread runner = new Thread() {
        public void run() {
            counter = 0;
            while (counter <= 99) {
                Runnable runme = new Runnable() {
                    public void run() {
                        pbar.setValue(counter);
                    }
                };
                SwingUtilities.invokeLater(runme);
                counter++;
                try {
                    Thread.sleep(1000);
                } catch (Exception ex) {
                }
            }
        }
    };
    runner.start();

}

public void updateBar(int newValue) {
    pbar.setValue(newValue);
}

class MyItemListener implements ItemListener {
    public void itemStateChanged(ItemEvent e) {
        Object source = e.getSource();
        if (source instanceof AbstractButton == false)
            return;
        boolean checked = e.getStateChange() == ItemEvent.SELECTED;
        for (int x = 0, y = table.getRowCount(); x < y; x++) {
            table.setValueAt(new Boolean(checked), x, 0);
        }
    }
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            try {
                new JTableHeaderCheckBox().buildGUI();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                // e.printStackTrace();
            } catch (Exception ex) {
            }
        }
    });
}

public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    if (e.getSource() == but) {
        System.err.println("table.getRowCount()" + table.getRowCount());
        for (int x = 0, y = table.getRowCount(); x < y; x++) {
            if ("true".equals(table.getValueAt(x, 0).toString())) {
                System.err.println(table.getValueAt(x, 0));
                System.err.println(list.get(x).toString());
                delete(list.get(x).toString());
            }

        }
    }

}

public void delete(String a) {

    String delete = "C:";

    System.err.println(a);
    try {
        File inFile = new File(a);

        if (!inFile.isFile()) {
                            return;
        }

        // Construct the new file that will later be renamed to the             // filename.
        File tempFile = new File(inFile.getAbsolutePath() + ".tmp");

        BufferedReader br = new BufferedReader(new FileReader(inFile));
        PrintWriter pw = new PrintWriter(new FileWriter(tempFile));

        String line = null;

        // Read from the original file and write to the new
        // unless content matches data to be removed.
        while ((line = br.readLine()) != null) {
            System.err.println(line);
            line = line.replace(delete, " ");
            pw.println(line);
            pw.flush();

        }
        pw.close();
        br.close();

        // Delete the original file
        if (!inFile.delete()) {
            System.out.println("Could not delete file");
            return;
        }

        // Rename the new file to the filename the original file had.
        if (!tempFile.renameTo(inFile))
            System.out.println("Could not rename file");

    } catch (FileNotFoundException ex) {
        ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

   }


   class CheckBoxHeader extends JCheckBox implements TableCellRenderer,
    MouseListener {
protected CheckBoxHeader rendererComponent;
protected int column;
protected boolean mousePressed = false;

public CheckBoxHeader(ItemListener itemListener) {
    rendererComponent = this;
    rendererComponent.addItemListener(itemListener);
}

public Component getTableCellRendererComponent(JTable table, Object value,
        boolean isSelected, boolean hasFocus, int row, int column) {
    if (table != null) {
        JTableHeader header = table.getTableHeader();
        if (header != null) {
            rendererComponent.setForeground(header.getForeground());
            rendererComponent.setBackground(header.getBackground());
            rendererComponent.setFont(header.getFont());
            header.addMouseListener(rendererComponent);
        }
    }
    setColumn(column);
    rendererComponent.setText("Check All");
    setBorder(UIManager.getBorder("TableHeader.cellBorder"));
    return rendererComponent;
}

protected void setColumn(int column) {
    this.column = column;
}

public int getColumn() {
    return column;
}

protected void handleClickEvent(MouseEvent e) {
    if (mousePressed) {
        mousePressed = false;
        JTableHeader header = (JTableHeader) (e.getSource());
        JTable tableView = header.getTable();
        TableColumnModel columnModel = tableView.getColumnModel();
        int viewColumn = columnModel.getColumnIndexAtX(e.getX());
        int column = tableView.convertColumnIndexToModel(viewColumn);

        if (viewColumn == this.column && e.getClickCount() == 1
                && column != -1) {
            doClick();
        }
    }
}

public void mouseClicked(MouseEvent e) {
    handleClickEvent(e);
    ((JTableHeader) e.getSource()).repaint();
}

public void mousePressed(MouseEvent e) {
    mousePressed = true;
}

public void mouseReleased(MouseEvent e) {
}

public void mouseEntered(MouseEvent e) {
}

public void mouseExited(MouseEvent e) {
}
  }

 //

   import java.io.File; 
   import java.util.*; 
   public class GatheringFiles { 
   public static List returnlist(File folder) 
   { 
       List<File> list = new ArrayList<File>(); 
       List<File> list1 = new ArrayList<File>(); 
       getFiles(folder, list); 
       return list;
   } 
   private static void getFiles(File folder, List<File> list) { 
   folder.setReadOnly(); 
   File[] files = folder.listFiles(); 
   for(int j = 0; j < files.length; j++) {

if( "MANI.txt".equals(files[j].getName()))
{

    list.add(files[j]); 
}


  if(files[j].isDirectory()) 

  getFiles(files[j], list); 
  } 
  } 
   }

0 个答案:

没有答案