如何省去“;取消“;Java ProgressMonitor中的按钮?

如何省去“;取消“;Java ProgressMonitor中的按钮?,java,swing,Java,Swing,我的任务是必要的,不应该取消,我如何要求ProgressMonitor不显示“取消”按钮,以便在完成后自动关闭面板 弗兰克,那是不可能的。但是,您可以创建自定义进度监视器,如中所述 我在想也许我可以要求它 返回其中的组件并删除 按钮 使用Swing教程中的ProgressMonitorDemo(由BalusC链接到),我做了以下更改: public void propertyChange(PropertyChangeEvent evt) { if ("progress" == evt.g

我的任务是必要的,不应该取消,我如何要求ProgressMonitor不显示“取消”按钮,以便在完成后自动关闭面板


弗兰克,那是不可能的。但是,您可以创建自定义进度监视器,如中所述


我在想也许我可以要求它 返回其中的组件并删除 按钮

使用Swing教程中的ProgressMonitorDemo(由BalusC链接到),我做了以下更改:

public void propertyChange(PropertyChangeEvent evt) {
    if ("progress" == evt.getPropertyName() ) {
        int progress = (Integer) evt.getNewValue();
        progressMonitor.setProgress(progress);

        //  Added this

        AccessibleContext ac = progressMonitor.getAccessibleContext();
        JDialog dialog = (JDialog)ac.getAccessibleParent();
        java.util.List<JButton> components =
            SwingUtils.getDescendantsOfType(JButton.class, dialog, true);
        JButton button = components.get(0);
        button.setVisible(false);

        // end of change

        String message =
            String.format("Completed %d%%.\n", progress);
        progressMonitor.setNote(message);
        taskOutput.append(message);
        if (progressMonitor.isCanceled() || task.isDone()) {
            Toolkit.getDefaultToolkit().beep();
            if (progressMonitor.isCanceled()) {
                task.cancel(true);
                taskOutput.append("Task canceled.\n");
            } else {
                taskOutput.append("Task completed.\n");
            }
            startButton.setEnabled(true);
        }
    }
}
public void propertyChange(PropertyChangeEvent evt){
if(“progress”==evt.getPropertyName()){
int progress=(整数)evt.getNewValue();
progressMonitor.setProgress(progress);
//加上这个
AccessibleContext ac=progressMonitor.getAccessibleContext();
JDialog dialog=(JDialog)ac.getAccessibleParent();
java.util.List组件=
SwingUtils.getDegenantSoftype(JButton.class,dialog,true);
JButton button=components.get(0);
按钮。设置可见(假);
//变革的结束
字符串消息=
格式(“已完成%d%%.\n”,进度);
progressMonitor.setNote(消息);
taskOutput.append(消息);
if(progressMonitor.isCanceled()| | task.isDone()){
getDefaultToolkit().beep();
if(progressMonitor.isCanceled()){
任务。取消(true);
taskOutput.append(“任务已取消。\n”);
}否则{
taskOutput.append(“任务已完成。\n”);
}
startButton.setEnabled(真);
}
}
}
您还需要下载该类


代码应该只执行一次,否则当对话框关闭时会得到一个NPE。我会让你整理一下:)。

我在想也许我可以让它返回其中的组件并删除按钮。使用ProgressBar而不是ProgressMonitor。