【问题标题】:Centering dialog using JOptionPane.showMessageDialog使用 JOptionPane.showMessageDialog 居中对话框
【发布时间】:2009-08-12 11:13:18
【问题描述】:

我一直在使用类似于以下的代码来显示对话框:

JOptionPane.showMessageDialog(JOptionPane.getFrameForComponent(this), … yada

但是,我现在认为这“更正确”:

JOptionPane.showMessageDialog(getRootPane(), … yada

人们喜欢/推荐什么?

【问题讨论】:

    标签: java swing


    【解决方案1】:

    两者都不是“更正确的”——这取决于你想要什么效果。来自JOptionPane JavaDocs -

    parentComponent :定义要成为此对话框的父级的组件。它有两种使用方式:包含它的 Frame 用作对话框的 Frame 父级,其屏幕坐标用于放置对话框。通常,对话框位于组件的正下方。该参数可以为null,此时默认Frame作为父级,对话框将在屏幕上居中(取决于L&F)。

    在您的情况下,您希望对话框以框架为中心 - JOptionPane.getFrameForComponent(component) 或 SwingUtilities.getWindowAncestor(component) 从任何组件工作; getRootPane() 仅适用于 RootPaneContainer(即可能是 JFrame),您不妨在该上下文中使用“this”。

    【讨论】:

    • 我没有意识到 SwingUtilities 有那个方法 - 这可能是我想要的,因为我总是希望相对于包含显示对话框的组件的窗口居中。大概这比 getRootPane() 稍微通用一些,因为它将处理“包含”窗口不是根窗格容器的情况。
    【解决方案2】:

    如果您要扩展JFrameJDialog,例如,您可以只使用this 作为参数:

    JOptionPane.showMessageDialog(this, ...);
    

    【讨论】:

    • 不幸的是,这不会做我想要的:假设这是调用 JOptionPane.showXXX 调用的组件,这将使对话框相对于组件居中,而不是包含框架或对话框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    相关资源
    最近更新 更多