基于主Jframe的Child Jframe的绝对位置

时间:2015-02-21 00:11:50

标签: java swing jframe

我有以下代码从按钮调用新帧:

final JButton btnFontHelp = new JButton("Font Help");
    btnFontHelp.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            Framefont fr = new Framefont();
            fr.setBounds(100, 150, 400, 170);
            fr.setVisible(true);

        }
    });

fr.setBounds(100,150)是基于屏幕的绝对位置,而不是基于大型机。有没有办法知道主屏幕的绝对位置,以便子框架可以基于主框架而不是基于屏幕的位置出现在某个位置?

2 个答案:

答案 0 :(得分:1)

在ActionListener中,您可以添加如下代码:

JButton button = (JButton)arg0.getSource();
Window frame = SwingUtilities.windowForComponent( button );
Rectangle bounds = frame.getLocation();

现在,您可以使用Rectangle中的位置/大小信息将子窗口相对于其父窗口定位。

当然,如果移动父窗口,子窗口将保持在其当前位置。如果您希望子窗口移动,则需要向框架添加ComponentListener并处理componentMoved()事件以重新定位子窗口。

答案 1 :(得分:0)

而不是:

fr.setBounds(100, 150, 400, 170);

试试这个:

fr.setLocationRelativeTo(parentFrame);