Как опустить кнопку «Отмена» в Java ProgressMonitor? - PullRequest
3 голосов
/ 06 мая 2010

Моя задача необходима и не должна быть отменена, как я прошу ProgressMonitor не отображать кнопку «Отмена», поэтому, когда она завершится, она автоматически закроет панель.

Frank

Ответы [ 2 ]

4 голосов
/ 06 мая 2010

Я думал, может быть, я могу попросить это вернуть компоненты в нем и удалить кнопка

Используя ProgressMonitorDemo из учебника по Swing (связан с 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);
        }
    }
}

Вам также необходимо загрузить класс Swing Utils .

Код должен быть выполнен только один раз, в противном случае вы получите NPE, когда диалоговое окно закроется. Я позволю тебе привести это в порядок:).

1 голос
/ 06 мая 2010

Это невозможно. Однако вы можете создать собственный монитор хода выполнения, как описано в этом руководстве .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...