1

JScrollPane にオブジェクトがあります。オブジェクトの高さが増減すると、JScrollBars が現れたり消えたりします。

これがいつ起こっているかを検出する方法はありますか?

Object が JScrollBars によって妨げられないように、またその逆も同様に、JScrollPane が表示されたときに JScrollPane 全体を広げたいと考えています。

4

1 に答える 1

2

次のように、コンポーネント サイズの変更を簡単に聞くことができます。

    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;
        }
    }
}

これは強制されます...

  1. ...コンポーネントを使用して優先幅ゼロを返すため、スクロール ペインは常に現在の内部ビューで使用可能な幅に縮小されます。

  2. ...ペインをスクロールして、実際のコンテンツの優先幅に従って変更された優先幅を返すため、オブジェクトを適切に表示するために必要な場所を取得できます。

この例は、状況に応じて変更できます。たとえば、スクロール ペインを配置するコンテナ レイアウトによって異なる場合があります。

于 2013-09-21T23:16:35.957 に答える