У меня есть 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
работает. Проблема решена, спасибо.