プログラマメモ2 - programmer no memo2

swing スクロールペイン上の隠れたコンポーネントにフォーカスがあたったときに自動で表示するようにする 2007/03/23

スクロールペイン上の隠れたコンポーネントにフォーカスがあたったときに自動で表示するようにしたい。


解決方法として、フォーカス移動した場合、表示したいコンポーネントにフォーカスリスナーをつけます。
フォーカスを取得した場合に、親のコンポーネントののscrollRectToVisibleメソッドを利用します。
その際の引数には、対象コンポーネントのgetBoundsの値を利用するとうまくいきました。


class FocusListnerForScrollRectToVisible implements FocusListener {
public void focusGained(FocusEvent e) {

Component component = e.getComponent();
if (!(component instanceof JComponent))
return;
JComponent component2 = (JComponent) e.getComponent();
Rectangle r = component2.getBounds();

if (component2.getParent() instanceof JComponent)
((JComponent) (component2.getParent())).scrollRectToVisible(r);
}
public void focusLost(FocusEvent e) {
}
}

: