Java 如何将JPOppMenu设置为;影子“;组件

Java 如何将JPOppMenu设置为;影子“;组件,java,swing,jpopupmenu,Java,Swing,Jpopupmenu,我有一个自定义的自动完成JTextField。我使用jpopmpmenu来包含选择。 我想使用此方法将JPopupMenu弹出到JTextField的正下方 Rectangle r = textField.getBounds(); popup.show(textField, (int)(r.getX()), (int)(r.getY() + textField.getHeight)); popup.setVisible(true); 当我把组件放在一个简单的JFrame中时,它就工作了。但是当

我有一个自定义的自动完成JTextField。我使用jpopmpmenu来包含选择。 我想使用此方法将JPopupMenu弹出到JTextField的正下方

Rectangle r = textField.getBounds();
popup.show(textField, (int)(r.getX()), (int)(r.getY() + textField.getHeight));
popup.setVisible(true);
当我把组件放在一个简单的JFrame中时,它就工作了。但是当我使用JScrollPane将组件放在一个复杂的布局中时。位置变得随机且不一致。我希望弹出菜单可以在任何情况下对文本字段进行“阴影”处理。我如何做到这一点?谢谢。

弹出窗口的位置是


如果将其放在
文本字段的正下方

getBounds将返回组件相对于其父组件的位置。相反,尝试使用“谢谢”,这很有效。但有一件事。当JScrollPane的滚动条的初始状态可见时,第一个弹出位置会稍微移动。在第二次弹出时,它会恢复正常。“你知道这是什么原因吗?”威廉,我不知道。当然不是没有代码测试。弹出窗口有一些微妙的问题,其中许多是特定于系统的。例如,如果外观和感觉不正常,例如使用带有边框的面板(通常没有边框),则它们在第一次使用时的大小可能会稍微不正确。
popup.show(textField, 0, textField.getHeight());