Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java打开相对于按钮位置的JFrame(类似菜单的行为)_Java_Swing_User Interface_Position_Jframe - Fatal编程技术网

Java打开相对于按钮位置的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

我正在尝试实现下面示例中的扩展功能,但是我使用的不是菜单,而是包含更复杂GUI元素的JFrame。 我遇到的问题是,如果我移动包含框架应显示在其下方的按钮的父窗口,我无法调整自定义JFrame以相对于该按钮的位置每次打开

起初我只是简单地使用

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()确定;它显示异常。在这种情况下,您可能需要先初始化并显示新帧,然后按照答案中所示设置位置。