增加进度条百分比
increase the progressbar percentage
我有下面的一段代码,其中有一个必须前进的进度条。
public void createFiles(String srcText, String destText, JTextArea outputTextArea, JProgressBar progressBar) {
String zipFilePath = srcText;
String destDirectory = destText;
UnZip unzipper = new UnZip();
File dir = new File(zipFilePath);
File[] files = dir.listFiles();
System.out.println(files.length);
double pBarInt = (double) files.length / 100;
int count = 1;
System.out.println(count);
if (null != files) {
for (int fileIntList = 0; fileIntList < files.length; fileIntList++) {
System.out.println("coun in vlocj " + count);
String ss = files[fileIntList].toString();
if (null != ss && ss.length() > 0) {
try {
if (files[fileIntList].isDirectory())
continue;
unzipper.unzip(zipFilePath + ss.substring(ss.lastIndexOf("\") + 1, ss.length()), destDirectory,
outputTextArea);
if ((fileIntList + 1) % pBarInt == 0) {
progressBar.setValue(count);
progressBar.update(progressBar.getGraphics());
count += 1;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
}
此处files.length
的值为25。
我的问题是,因为有 25 个文件,其中 1% 将是 2.5%,我可以将我的进度条增加为每 4 个文件处理为 10%,或者我可以在处理文件时显示 2.5%。
如果 files.length
大于 100,我可以做到,但无法理解小于 100 的文件。
请告诉我如何完成此操作。
谢谢
您可能只需要正确设置最大值。例如:
progressBar.setMaximum(files.length);
首先要只获取文件而不是目录,请执行以下操作:
File[] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File file, String name) {
return !file.isDirectory();
}
});
我会这样写:
File[] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File file, String name) {
return !file.isDirectory();
}
});
progressBar.setMaximum(files.length);
for (int i = 0; i < files.length; i++) {
File f = files[i];
try {
unzipper.unzip(f.getAbsolutePath(), destDirectory, outputTextArea);
progressBar.setValue(i);
progressBar.update(progressBar.getGraphics());
} catch (Exception ex) {
ex.printStackTrace();
}
}
并且您可能希望在线程中分派它。请参阅对您的问题的评论。
不确定为什么需要这个条件(fileIntList + 1) % pBarInt == 0
您应该将进度条计数设置为文件总数的百分比。尝试使用
progress.setValue(100);
....
int progressBarValue = count * 100/files.length;
progressBar.setValue(progressBarValue);
为准确起见,请使用正确的 files.length - 忽略目录。
我有下面的一段代码,其中有一个必须前进的进度条。
public void createFiles(String srcText, String destText, JTextArea outputTextArea, JProgressBar progressBar) {
String zipFilePath = srcText;
String destDirectory = destText;
UnZip unzipper = new UnZip();
File dir = new File(zipFilePath);
File[] files = dir.listFiles();
System.out.println(files.length);
double pBarInt = (double) files.length / 100;
int count = 1;
System.out.println(count);
if (null != files) {
for (int fileIntList = 0; fileIntList < files.length; fileIntList++) {
System.out.println("coun in vlocj " + count);
String ss = files[fileIntList].toString();
if (null != ss && ss.length() > 0) {
try {
if (files[fileIntList].isDirectory())
continue;
unzipper.unzip(zipFilePath + ss.substring(ss.lastIndexOf("\") + 1, ss.length()), destDirectory,
outputTextArea);
if ((fileIntList + 1) % pBarInt == 0) {
progressBar.setValue(count);
progressBar.update(progressBar.getGraphics());
count += 1;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
}
此处files.length
的值为25。
我的问题是,因为有 25 个文件,其中 1% 将是 2.5%,我可以将我的进度条增加为每 4 个文件处理为 10%,或者我可以在处理文件时显示 2.5%。
如果 files.length
大于 100,我可以做到,但无法理解小于 100 的文件。
请告诉我如何完成此操作。
谢谢
您可能只需要正确设置最大值。例如:
progressBar.setMaximum(files.length);
首先要只获取文件而不是目录,请执行以下操作:
File[] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File file, String name) {
return !file.isDirectory();
}
});
我会这样写:
File[] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File file, String name) {
return !file.isDirectory();
}
});
progressBar.setMaximum(files.length);
for (int i = 0; i < files.length; i++) {
File f = files[i];
try {
unzipper.unzip(f.getAbsolutePath(), destDirectory, outputTextArea);
progressBar.setValue(i);
progressBar.update(progressBar.getGraphics());
} catch (Exception ex) {
ex.printStackTrace();
}
}
并且您可能希望在线程中分派它。请参阅对您的问题的评论。
不确定为什么需要这个条件(fileIntList + 1) % pBarInt == 0
您应该将进度条计数设置为文件总数的百分比。尝试使用
progress.setValue(100);
....
int progressBarValue = count * 100/files.length;
progressBar.setValue(progressBarValue);
为准确起见,请使用正确的 files.length - 忽略目录。