我有以下代码从按钮调用新帧:
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)是基于屏幕的绝对位置,而不是基于大型机。有没有办法知道主屏幕的绝对位置,以便子框架可以基于主框架而不是基于屏幕的位置出现在某个位置?
答案 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);