Я создаю приложение Java, и я хочу знать, когда появляется окно JDialog и блокирует другие кадры, как я могу изменить значок курсора, когда он находится вне диалогового окна.
Я имею в виду, когда курсор находится в диалоговом окне, он будет выглядеть нормально, а когда он за пределами диалога, я хочу изменить курсор, чтобы пользователь знал, что основной кадр заблокирован, пока он не закрывает текущий диалог.
Это не представляется возможным. Я собирался предложить базовый цикл, который будет перебирать открытые окна и устанавливать все те, кроме диалога, на другой курсор:
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 попытка взаимодействия с окном, заблокированным модальным диалогом, вызывает звуковой сигнал, а строка заголовка модального диалога мигает, и это хорошо понимаемое поведение.
JFrame
созданные вашим кодом, другими приложениями. в системе или что-то еще? Чтобы быстрее получить помощь, опубликуйте MCVE ( пример минимальной полной проверки).