JScrollPane にオブジェクトがあります。オブジェクトの高さが増減すると、JScrollBars が現れたり消えたりします。
これがいつ起こっているかを検出する方法はありますか?
Object が JScrollBars によって妨げられないように、またその逆も同様に、JScrollPane が表示されたときに JScrollPane 全体を広げたいと考えています。
JScrollPane にオブジェクトがあります。オブジェクトの高さが増減すると、JScrollBars が現れたり消えたりします。
これがいつ起こっているかを検出する方法はありますか?
Object が JScrollBars によって妨げられないように、またその逆も同様に、JScrollPane が表示されたときに JScrollPane 全体を広げたいと考えています。
次のように、コンポーネント サイズの変更を簡単に聞くことができます。
JPanel object = new JPanel ();
object.addComponentListener ( new ComponentAdapter ()
{
public void componentResized ( ComponentEvent e )
{
// Your object size changed
}
} );
JScrollPane scrollPane = new JScrollPane ( object );
しかし、それはあなたの特定の目的を解決しないかもしれません.
スクロール ペインの垂直スクロール バーがオブジェクトの邪魔にならないようにする場合は、小さなトリックを使用して、スクロール ペインとオブジェクトの両方をだますことができます。この例を確認してください:
public class Example
{
public static void main ( String[] args )
{
final MyObject object = new MyObject ();
final JScrollPane scrollPane = new JScrollPane ( object )
{
public Dimension getPreferredSize ()
{
final Dimension ps = super.getPreferredSize ();
final JScrollBar vsb = getVerticalScrollBar ();
final Insets i = getInsets ();
ps.width = object.getPreferredWidth () + ( vsb.isShowing () ? vsb.getPreferredSize ().width : 0 ) + i.left + i.right;
return ps;
}
};
}
public static class MyObject extends JPanel
{
public Dimension getPreferredSize ()
{
final Dimension ps = super.getPreferredSize ();
ps.width = 0;
return ps;
}
public int getPreferredWidth ()
{
return super.getPreferredSize ().width;
}
}
}
これは強制されます...
...コンポーネントを使用して優先幅ゼロを返すため、スクロール ペインは常に現在の内部ビューで使用可能な幅に縮小されます。
...ペインをスクロールして、実際のコンテンツの優先幅に従って変更された優先幅を返すため、オブジェクトを適切に表示するために必要な場所を取得できます。
この例は、状況に応じて変更できます。たとえば、スクロール ペインを配置するコンテナ レイアウトによって異なる場合があります。