JScrollPane
の中にJTable
があります。私はテーブルの列のいずれかのカスタムセルエディタを作成しています。このエディタにスクロールしてJList
をポップアップ表示させます。私はPopup
を使ってJList
を含む新しいJScrollPane
を表示することでこれを行いました。Swing: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
が機能します。問題は解決しました、ありがとうございます。