Swing: позиционирование всплывающего окна из JScrollPane - PullRequest
0 голосов
/ 22 мая 2009

У меня есть JTable внутри JScrollPane. Я создаю пользовательский редактор ячеек для одного из столбцов таблицы и хочу, чтобы этот редактор отображал прокрутку JList. Я сделал это с помощью Popup, чтобы показать новый 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 работает. Проблема решена, спасибо.

1 Ответ

1 голос
/ 22 мая 2009

Вы можете запросить абсолютную позицию на экране с помощью Component.getLocationOnScreen(). Это то, что вы ищете?

...