私は のJTable
内部を持っていJScrollPane
ます。テーブルの列の 1 つにカスタム セル エディターを作成しています。このエディターでスクロールをポップアップさせたいと考えていJList
ます。を含むPopup
新しいを表示するためにa を使用してこれを行いました。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
DOESは機能します。問題は解決しました、ありがとう。