Отображать курсор ожидания при нажатии "Далее" - Netbeans WizardDescriptor

У меня есть мастер-итератор с несколькими дескрипторами PanelDescriptors. Я пытаюсь отобразить курсор ожидания при нажатии "Далее" на одном PanelDescriptor, который реализует WizardDescriptor.ValidatingPanel. Метод validate() в этом требует времени выполнения.

Пока что я пробовал несколько способов, ни один из них не работает для меня.

  1. http://dev.platform.netbeans.narkive.com/ofiffInN/finally-a-waitcursor-routine-that-works-in-netbeans
  2. http://netbeans-org.1045718.n5.nabble.com/Setting-wait-cursor-td3026613.html

    private static void changeCursorWaitStatus(final boolean isWaiting) {
        Mutex.EVENT.writeAccess(new Runnable() {
            public void run() {
                try {
                    JFrame mainFrame = (JFrame) WindowManager.getDefault().getMainWindow();
                    Component glassPane = mainFrame.getGlassPane();
                    if (isWaiting) {
                        glassPane.setVisible(true);
                        glassPane.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                    } else {
                        glassPane.setVisible(false);
                        glassPane.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                    }
                } catch (Exception e) {
                    // probably not worth handling 
                }
            }
        });
    }
    
  3. https://community.oracle.com/message/5322657

    try {            
        TopComponent.getRegistry().getActivated().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
        doBusyStuff();
    } finally {
        TopComponent.getRegistry().getActivated().setCursor(Cursor.getDefaultCursor());
    }
    

Любая подсказка, чтобы указать мне в правильном направлении, будет оценена.

1 ответ

Попробуй это

    private static final java.awt.event.MouseAdapter mouseAdapter = new java.awt.event.MouseAdapter() {

    };

    protected static final Cursor READY_CSR = new Cursor(Cursor.DEFAULT_CURSOR);
    protected static final Cursor WAIT_CSR  = new Cursor(Cursor.WAIT_CURSOR);

    public void setBusy(boolean busy) {

        if(busy) {
            setCursor(WAIT_CSR);
            frame.getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
            frame.getGlassPane().addMouseListener(mouseAdapter);
            frame.getGlassPane().setVisible(true);
        }else {
            setCursor(READY_CSR);
            frame.getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
            frame.getGlassPane().removeMouseListener(mouseAdapter);
            frame.getGlassPane().setVisible(false);
        }
    }
Другие вопросы по тегам