【问题标题】:Is there a way to determine the correct order of Okay / Cancel buttons?有没有办法确定确定/取消按钮的正确顺序?
【发布时间】:2015-09-17 10:39:28
【问题描述】:

我们有一个 Swing 应用程序,其中包含许多带有确定和取消按钮的输入对话框。

我注意到在 JOptionPane 中,确定和取消按钮的顺序会根据平台而有所不同。在 Windows 上可以/取消,在 Unix 上可以取消/可以。

我们添加了自己的确定和取消按钮,我希望它们的顺序与它们在 JOptionPane 中显示的顺序相匹配以保持一致性。

我想知道是否有办法询问 UIManager 以找出当前外观或平台的正确顺序。

提前致谢。 马特

【问题讨论】:

    标签: java swing jpanel jbutton joptionpane


    【解决方案1】:

    JOptionPane 中按钮的顺序由

    控制
    boolean isYesLast = UIManager.getDefaults().getBoolean("OptionPane.isYesLast");
    

    如果isYesLast 为真,则按钮顺序颠倒(例如,yes/no/cancel -> cancel/no/yes)

    【讨论】:

    • 这正是我想要的。非常感谢。
    • 注意:返回不正确的结果,AquaOptionPaneUI
    • @trashgod:有趣。 AquaOptionPaneUI 使用自己的 Layout 来排列按钮区域并绕过 BaseOptionPaneUI 定义的机制。
    • 我没有得到我期望的结果...UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());Boolean isYesLast = (Boolean) UIManager.get("OptionPane.isYesLast");System.out.println(isYesLast);JOptionPane.showConfirmDialog(null, "are you sure?");isYesLast = (Boolean) UIManager.get("OptionPane.isYesLast");System.out.println(isYesLast);我期待看到第一个结果为空,但是我也看到第二个 null 。有任何想法吗?谢谢。
    • 嗨 Wero,com.sun.java.swing.plaf.windows.WindowsLookAndFeel 谢谢马特
    【解决方案2】:

    是的,但不是您期望的那样。 您必须设计自己的 OptionPane 类。而且您必须从 JOptionPane 扩展。通过这种方式,您可以设计按钮的放置位置。 我个人建议寻找其他解决方案。

    【讨论】:

    • 感谢您的建议。根据上面 wero 的回答,这是这样做的方法: Boolean isYesLast = (Boolean)UIManager.get("OptionPane.isYesLast");
    【解决方案3】:

    你可以用这个:

    Object[] options = { "OK", "CANCEL" };
    JOptionPane.showOptionDialog(null, "Click OK to continue", "Warning",
    JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,
    null, options, options[0]);
    

    【讨论】:

    • 谢谢,但我想使用系统观感,或者允许用户指定观感。我只是想根据所使用的 LAF 找出应该添加按钮的正确顺序。
    • 请参阅编辑后的答案。见link