【问题标题】:Swing: Positioning a popup from within a JScrollPaneSwing:从 JScrollPane 中定位弹出窗口
【发布时间】: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


    【解决方案1】:

    您可以使用Component.getLocationOnScreen() 查询屏幕绝对位置。这就是你要找的吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多