我有JTable
一个JScrollPane
. 我正在为表格的一列创建一个自定义单元格编辑器,我希望这个编辑器弹出一个滚动的JList
. 我已经通过使用 aPopup
来显示一个JScrollPane
包含JList
.
一切正常,除了Popup
. 我的编辑器自定义组件基本上是这样的:
public class CustomPanel extends JPanel {
JTextField text = new JTextField();
JList list = new JList();
JScrollPane scroll = new JScrollPane(list);
Component owner = null;
public CustomPanel(Component owner) {
this.owner = owner;
add(text);
}
public void showPopup() {
Popup p = PopupFactory.getPopup(owner, scroll, getX(), getY()+getHeight());
p.show();
}
}
正在发生的事情是getX()
返回getY()
表格单元格相对于持有它的 JScrollPane 的位置,并且Popup
想要绝对屏幕位置。即使我传入它们相对owner
的JScrollPane
那个,它也不起作用。如果我使用text.getX()
/ ,我会遇到同样的问题text.getY()
。
我怎样才能把我的Popup
直接放在下面TextBox
?
更多背景知识:最终目标是一个多选组合框,它将所有选定的项目显示为逗号分隔的列表。如果其他类似的东西已经存在,请不要犹豫,指出我。
编辑:owner.getLocationOnScreen().y + getY()
当滚动窗格在任何地方但一直向上滚动时不起作用。然而,只是简单getLocationOnScreen().y
的工作。问题已解决,谢谢。