该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
正好有个类似的例子:
public class FileTree extends JFrame {
JDialog dialog = new JDialog();
JPanel panel = new JPanel();
JLabel field = new JLabel();
JProgressBar progressBar = new JProgressBar();
JButton btn = new JButton();
SwingWorker worker;
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("我的电脑");
public FileTree() {
panel.setLayout(new BorderLayout());
panel.add(field, BorderLayout.CENTER);
panel.add(progressBar, BorderLayout.SOUTH);
progressBar.setStringPainted(true);
panel.setBorder(BorderFactory.createLineBorder(Color.black));
dialog.setContentPane(panel);
dialog.setUndecorated(true);
dialog.setSize(500, 50);
dialog.setLocationRelativeTo(null);
dialog.setAlwaysOnTop(true);
dialog.setVisible(true);
getWorker().execute();
}
public SwingWorker getWorker() {
if (worker == null) {
worker = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
File[] roots = File.listRoots();
for (File file : roots) {
getFiles(file, rootNode, true);
}
return null;
}
@Override
protected void done() {
dialog.setVisible(false);
JTree tree = new JTree(rootNode, true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(new JScrollPane(tree));
setSize(400, 300);
setLocationRelativeTo(null);
setVisible(true);
}
private void getFiles(File file, DefaultMutableTreeNode node,
boolean root) {
publish(file.getAbsolutePath());
String name;
if (root) {
name = file.getAbsolutePath();
} else {
name = file.getName();
}
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(
name);
if (file.isDirectory()) {
File[] files = file.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
setProgress(i * 100 / files.length);
getFiles(files[i], newNode, false);
}
}
}
node.add(newNode);
}
@Override
protected void process(List chunks) {
for (String string : chunks) {
field.setText(string);
}
}
};
worker.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if ("progress".equals(evt.getPropertyName())) {
Integer integer = (Integer) evt.getNewValue();
progressBar.setValue(integer);
}
}
});
}
return worker;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new FileTree();
}
});
}
}