Изменить курсор, когда он находится за пределами JDialog

1

Я создаю приложение Java, и я хочу знать, когда появляется окно JDialog и блокирует другие кадры, как я могу изменить значок курсора, когда он находится вне диалогового окна.

Я имею в виду, когда курсор находится в диалоговом окне, он будет выглядеть нормально, а когда он за пределами диалога, я хочу изменить курсор, чтобы пользователь знал, что основной кадр заблокирован, пока он не закрывает текущий диалог.

  • 0
    «Блокировать другие кадры». Это другие объекты JFrame созданные вашим кодом, другими приложениями. в системе или что-то еще? Чтобы быстрее получить помощь, опубликуйте MCVE ( пример минимальной полной проверки).
  • 0
    нет это фреймы, созданные мной в приложении
Показать ещё 4 комментария
Теги:
swing
jdialog

1 ответ

0

Это не представляется возможным. Я собирался предложить базовый цикл, который будет перебирать открытые окна и устанавливать все те, кроме диалога, на другой курсор:

    JDialog dialog = new JDialog(ownerFrame, "dialog", true); // modal
    dialog.setLocationRelativeTo(ownerFrame);

    Cursor cursorInvalid;
    try {
        cursorInvalid = Cursor.getSystemCustomCursor("Invalid.32x32");
    } catch (HeadlessException | AWTException e) {
        throw new RuntimeException(e);
    }

    Map<Window,Cursor> previousCursors = new HashMap<>();
    for (Window w : Window.getWindows()) {
        if (w != dialog) {
            previousCursors.put(w, w.getCursor());
            w.setCursor(cursorInvalid);
        }
    }

    dialog.setVisible(true);

    for (Window w : Window.getWindows()) {
        w.setCursor(previousCursors.get(w));
    }

Это меняет свойство курсора для окон успешно, но пока модальное диалоговое окно открыто, свойство курсора этих окон, по-видимому, игнорируется и всегда отображается стрелка по умолчанию. Я также попытался установить свойство курсора для отдельных компонентов окна, но опять же, как только модальный диалог открывается, свойство курсора игнорируется.

Я тестировал это на Windows. Поведение, возможно, зависит от платформы, поэтому оно может работать и на других операционных системах.

Однако, даже если это сработает, я хотел бы предположить, что это не очень хорошая идея. Это создает путаницу, чтобы игнорировать ожидания пользователей о том, как работают основные окна и диалоги. Для этой операционной системы уже есть свои правила. Например, в Windows попытка взаимодействия с окном, заблокированным модальным диалогом, вызывает звуковой сигнал, а строка заголовка модального диалога мигает, и это хорошо понимаемое поведение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню