Качать:Размещение всплывающего окна внутри JScrollPane
-
23-08-2019 - |
Вопрос
у меня есть 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
Работает.Проблема решена, спасибо.
Решение
Вы можете запросить абсолютное положение экрана с помощью Component.getLocationOnScreen()
.Это то, что вы ищете?