Java打开相对于按钮位置的JFrame(类似菜单的行为)
我正在尝试实现下面示例中的扩展功能,但是我使用的不是菜单,而是包含更复杂GUI元素的JFrame。 我遇到的问题是,如果我移动包含框架应显示在其下方的按钮的父窗口,我无法调整自定义JFrame以相对于该按钮的位置每次打开 起初我只是简单地使用Java打开相对于按钮位置的JFrame(类似菜单的行为),java,swing,user-interface,position,jframe,Java,Swing,User Interface,Position,Jframe,我正在尝试实现下面示例中的扩展功能,但是我使用的不是菜单,而是包含更复杂GUI元素的JFrame。 我遇到的问题是,如果我移动包含框架应显示在其下方的按钮的父窗口,我无法调整自定义JFrame以相对于该按钮的位置每次打开 起初我只是简单地使用 myCustomFrame.setLocation(myButton.getX(), (myButton.getY() + 73)); 但如果我更改“移动父窗口”,这显然不起作用 在那之后我试过了 myCustomFrame.setLocationRel
myCustomFrame.setLocation(myButton.getX(), (myButton.getY() + 73));
但如果我更改“移动父窗口”,这显然不起作用
在那之后我试过了
myCustomFrame.setLocationRelativeTo(myButton);
但在这种情况下,它会出现在按钮的顶部。。。我会根据具体情况调整位置,但这不是解决方案
因此,我试图获得与菜单相同的行为,以便自动调整JFrame的位置
有人有什么建议吗?您是否考虑过使用
myButton.getLocationOnScreen()
?这样,无论您将包含按钮的jFrame移动到何处,都将始终从屏幕左上角测量按钮的点
您可以更改原始方法,如下所示:
myCustomFrame.setLocation(myButton.getLocationOnScreen().x, (myButton.getLocationOnScreen().y + 73));
我在线程“AWT-EventQueue-0”java.AWT.IllegalComponentStateException中获得了IllegalComponentStateException异常
异常。IllegalComponentStateException:必须在屏幕上显示组件才能确定其位置,但它说必须在屏幕上显示组件才能确定其位置组件是否可见?尝试将组件背景颜色设置为红色,这样您就可以确定了。在父jframe中,我只有两个东西可以看到,一个jpanel和一个jbutton。当我按下jbutton打开新的未装饰的jframe时,其位置根据jbutton.getLocationOnScreen()确定;它显示异常。在这种情况下,您可能需要先初始化并显示新帧,然后按照答案中所示设置位置。