java - 当光标位于 JDialog 之外时更改光标

标签 java swing jdialog

我正在创建一个 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 上,尝试与模式对话框阻止的窗口进行交互会导致发出蜂鸣声,并且模式对话框的标题栏会闪烁,这是很好理解的行为。

关于java - 当光标位于 JDialog 之外时更改光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26097260/

相关文章:

java - Java 中的运行时编译

java - 更新 Java Swing JList

java - 更改/删除默认标记/关注元素

java - 如何确定在哪个屏幕上显示 JDialog

java - 如何在 JDialog 上设置 MaximumSize?

java - Android中用ListView显示矩形框

java - 使用 CALENDAR 将月份和日期转换为一年中的日期

java - vertex 3.x 从http请求获取时区

用于 netflow 的 Java 库

java - 使用 SwingUtilities.invokeLater 专注于 JDialog?