【问题标题】:Java Swing: positioning dialog on top of existing windowJava Swing:在现有窗口顶部定位对话框
【发布时间】:2010-12-13 05:38:50
【问题描述】:

有人可以展示简单的 Java Swing 代码/Web 资源,当点击 JFrame 的按钮时,它会将弹出对话框中心对齐地放置在现有 JFrame 窗口的顶部?

【问题讨论】:

    标签: java swing jdialog


    【解决方案1】:

    您说的是哪种弹出对话框?如果您使用的是 JOptionPane 或类似的东西,请将其父组件设置为 JFrame,它会自动在 JFrame 窗口的顶部居中。

    JOptionPane.showMessageDialog(frame, "Hello, World!");
    

    如果您正在创建自己的 JDialog,您可以使用 JFrame.getLocation() 获取 JFrame 的位置,并使用 JFrame.getSize() 获取其大小。从那里开始,数学非常简单;只需计算 JFrame 的中心并减去 JDialog 的一半宽度/高度即可得到对话框的左上角。

    如果您的 JDialog 尚未呈现,JFrame.getSize() 可能会给您一个零大小。在这种情况下,您可以使用 JDialog.getPreferredSize() 来确定它在屏幕上呈现后的大小。

    【讨论】:

      【解决方案2】:

      哦..这很简单:

      假设您有一个包含 JDialog 的 JFrame,并且您希望 JDialog(打开时)位于 JFrame 的正上方。

      所以在 JDialog 构造函数中,你应该有类似的东西:

      public class MyDialog extends JDialog 
      public MyDialog(JFrame parent) 
      {
          super.setLocationRelativeTo(parent); // this will do the job
      }
      

      换句话说,将 JFrame 指针传递给您的对话框,然后调用 setLocationRelativeTo(...);方法。

      【讨论】:

      • 我没有意识到这个方法的存在;很方便!
      • 哇,这真的帮了我大忙!不过小细节......它应该只在设置对话框大小之后调用,否则对话框将出现其左上角以父窗口为中心。
      【解决方案3】:

      我通常调用如下方法:

      dialog.setLocationRelativeTo(parent);
      

      Link to Javadocs

      【讨论】:

        【解决方案4】:

        如果您想在窗口上显示模态且居中的对话框...

        在对话框的构造函数中:

        class CustomDialog extends JDialog {
            public CustomDialog(Frame owner, String title, boolean modal) {
                super(owner, title, modal);
                setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
        
                ...
        
                setSize(150, 100);
                setLocationRelativeTo(owner);
            }
        }
        

        显示对话框(使用按钮等):

        public void actionPerformed(ActionEvent e) {
            dialog.setVisible(true);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-23
          相关资源
          最近更新 更多