我想使用ProgressMonitor
的功能,但我不想让用户选择取消操作。我知道如果我不打电话isCanceled()
那么按下按钮没有效果,但我不希望让用户认为该节目没有响应。
我该如何做到这一点?
答案 0 :(得分:3)
你做不到。使用JProgressBar创建自己的对话框,如The Java Tutorial。
中所述答案 1 :(得分:3)
我不知道为什么所有ProgressMonitor字段都是私有的。可能不是Godsling先生最骄傲的创作:)
* @author James Gosling
* @author Lynn Monsanto (accessibility)
* @version 1.37 04/12/06
只需克隆它,以及来自Swing的一些软件包私有东西,然后你可以做任何你想做的事情,比如为可取消性添加一个标志,并在ProgressOptionPane的构造函数中使用它。
(更新)如果您无法在SCSL下导出JDK代码,那么这是一种获取JDialog的狡猾方法,那么您可以执行任何操作,包括删除“取消”按钮:
progressMonitor = new ProgressMonitor(ProgressMonitorDemo.this,
"Running a Long Task",
"", 0, 100);
progressMonitor.setMillisToDecideToPopup(0);
progressMonitor.setMillisToPopup(0);
progressMonitor.setProgress(0);
JDialog dialog = (JDialog)progressMonitor.getAccessibleContext().getAccessibleParent();
JOptionPane pane = (JOptionPane)dialog.getContentPane().getComponent(0);
pane.setOptions(new Object[]{});
这很难看,它完全依赖于ProgressMonitor的实现。所以你应该检查ClassCastException和null。
为什么需要将两个时间段都设置为0?否则,不会在setProgress中创建对话框。
答案 2 :(得分:1)
我知道这篇文章有点陈旧,但谷歌的第一个答案,所以我会发布我的答案......
我没有禁用取消按钮的解决方案,但我使用此提示:点击取消时重新显示进度监视器。
public void propertyChange (PropertyChangeEvent event) {
if (event.getPropertyName().equals("progress")) {
int progress = ((Integer) event.getNewValue()).intValue();
lastProgress = progress;
progressMonitor.setProgress(progress);
}
if (progressMonitor.isCanceled()) {
progressMonitor = new ProgressMonitor(panel, "", "", 0, 100);
progressMonitor.setMillisToDecideToPopup(0);
progressMonitor.setMillisToPopup(0);
progressMonitor.setProgress(lastProgress);
}
}
当然,你必须记住最后的进展值。
这个解决方案有点过时,但对我来说很有用。
伊夫
答案 3 :(得分:0)
第一个问题是为什么您不希望用户能够取消操作?如果花了这么长时间,他们为什么不能决定他们不想等待呢?
如果你真的不想要取消按钮,你必须咬紧牙关并创建自己的进度对话框。您可以查看ProgressMonitor
来源,了解他们是如何做到的(他们使用JOptionPane
进行对话,并将其传递给Strings
和JProgressBar
几个。< / p>