【问题标题】:How to set JDialog position according to the parent JFrame? [duplicate]如何根据父JFrame设置JDialog位置? [复制]
【发布时间】:2014-02-09 07:46:01
【问题描述】:

我的系统中有一个父框架和一个我需要在单击时显示的对话框。但我需要在父框架的中间显示该对话框。整天。并且该父框架位置可能并不总是相同。那么如何将它全部设置在中间呢?

我正在开发 Swing JFrame

com.verve.visdashboard.NewOkCancelDialog cancelDialog = new com.verve.visdashboard.NewOkCancelDialog(new FrameOwnserPnael(), true);
cancelDialog.setLocationRelativeTo(new FrameOwnserPnael());
cancelDialog.setLocationByPlatform(true);

【问题讨论】:

    标签: java swing jframe jdialog


    【解决方案1】:

    只需将setLocationRelativeTo() 方法用于您的JDialog

    JDialog d = new JDialog();
    d.setLocationRelativeTo(COMPONENT);
    

    这里COMPONENT 是父框架。

    【讨论】:

    • M 尝试过,但它没有发生,因为我曾经这样使用过。看我有更新问题..
    • 尝试删除cancelDialog.setLocationByPlatform(true);
    • 移动父框架并单击时相同,然后位置不居中。
    • 在这种情况下,尝试发布 MCVE 复制问题,因为这应该可以。
    • 你说得对,我应该为此报告。
    【解决方案2】:

    基本代码应该是:

    JDialog dialog = new CustomDialog(...);
    dialog.pack();
    dialog.setLocationRelativeTo( parentFrame );
    

    在您使用 pack() 方法之前,对话框的大小为 (0, 0),因此对话框无法正确居中。

    【讨论】:

    • 让我试试,我会尽力让你知道的。
    【解决方案3】:

    每次创建新的父框架时。相反,您应该只创建一次父框架并使用该对象将其作为参数传递。

    FrameOwnserPnael parentFrame = new FrameOwnserPnael();
    com.verve.visdashboard.NewOkCancelDialog cancelDialog = new com.verve.visdashboard.NewOkCancelDialog(parentFrame, true);
    cancelDialog.setLocationRelativeTo(parentFrame);
    cancelDialog.setLocationByPlatform(true);
    

    【讨论】:

    • 但是当我改变父框架的位置时,对话框的位置并没有改变。 :(
    • 每次显示对话框前,都需要调用setLocationRelativeTo方法设置对话框的位置。
    • 是的,但我在事件上放了一个按钮,该事件一直被调用,但是如果我们更改面板位置,然后如果我们点击按钮,它不会显示相对位置。
    • 我的答案是错误的...查看 alex2410 的评论
    猜你喜欢
    • 2013-03-04
    • 2012-05-04
    • 1970-01-01
    • 2015-03-11
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    相关资源
    最近更新 更多