【发布时间】:2009-05-21 20:37:49
【问题描述】:
我在JScrollPane 中有一个JTable。我正在为表格的一列创建一个自定义单元格编辑器,我希望这个编辑器弹出一个滚动的JList。我通过使用Popup 来显示包含JList 的新JScrollPane。
一切正常,除了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 确实有效。问题已解决,谢谢。
【问题讨论】:
标签: java swing popup jscrollpane