我想使用ProgressMonitor的功能,但我不想给用户取消操作的选项,我知道如果我不调用isCanceled(),那么按下按钮就没有效果,但我不想让用户认为程序没有响应。
我该如何着手做这件事?
发布于 2009-02-04 16:39:52
您不能。使用The Java Tutorial中所述的JProgressBar创建您自己的对话框。
发布于 2009-04-22 22:26:09
我不知道为什么所有的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中创建该对话框。
发布于 2011-07-02 20:55:42
我知道这篇文章有点老了,但是谷歌上的第一个答案,所以我会把我的答案贴出来……
我没有办法禁用cancel按钮,但我使用这个技巧:当单击cancel时重新显示进度监视器。
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);
}
}当然,您必须记住最后一个进步值。
这个解决方案有点令人难以置信,但它对我来说很有效。
伊夫
https://stackoverflow.com/questions/512151
复制相似问题