为什么我的JOptionPane选项反了?

4

我正在开发和运行我的Java应用程序,它在OS X Mountain Lion上运行。我添加了一个自定义对话框的"Yes"和"No"选项。然而,当我在Windows 7上运行我的应用程序时,我注意到"Yes"和"No"选项被颠倒了。为了解决这个UI故障,我添加了以下代码:

    String msg = "Are you sure you want to cancel the selected bookings?";
    String[] options = new String[] { "Yes", "No" };
    int noOption = 1;
    String os = System.getProperty("os.name").toLowerCase();
    if ("mac os x".equals(os)) {
      options = new String[] { "No", "Yes" };
      noOption = 0;
    }

    int option =
        JOptionPane.showOptionDialog(null, msg, "Confirm Unbooking",
            JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, options,
            options[noOption]);
    if (option == noOption) {
      return;
    }

有人能告诉我为什么我会遇到我在第一次描述中提到的问题吗?我有一种感觉,这与应用程序的 L&F 有关。谢谢!


1
不要担心顺序,让LAF接管任务以符合平台UX指南,这样就可以高兴了 :-) - kleopatra
谢谢!当我创建自己的框架并将按钮放入其中时,我没有看到这种行为,只有在使用JOptionPane时才会出现。这是我第一次在不同平台上测试我的应用程序,所以看到这种行为发生我感到很惊讶。 - BJ Dela Cruz
1
你可能需要考虑使你的自定义框架/对话框中的按钮符合平台规范 :-) 不确定OptionPaneUI的内部是否足够可访问以便重用它们(可能不行),但有一些布局管理器可以接管(例如MigLayout,FormLayout)。 - kleopatra
1个回答

12

这确实是一个L&F特性,可以执行此操作(这不是UI故障)。我建议不要为了更好的用户体验而更改此设置。用户希望应用程序在平台上保持一致。Windows 和Linux 通常在左侧显示按钮,而MacOS 则在右侧显示按钮。

请看以下两个示例:

Windows:

enter image description here

MacOS:

enter image description here

可以看到在 MacOS 上最重要的按钮显示在最右边,而在 Windows 上则相反。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接