JScrollPane JScrollBar проживание

У меня есть объект в JScrollPane. Когда высота объектов увеличивается и уменьшается, JScrollBars появляются и исчезают.

Есть ли способ определить, когда это происходит?

Я хочу расширить весь JScrollPane, когда они появляются, чтобы Object не мешал его правой части JScrollBars и наоборот.

1 ответ

Решение

Вы можете легко слушать изменения размера компонента, как это:

    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. ... панель прокрутки для возврата измененной предпочтительной ширины в соответствии с ее фактической предпочтительной шириной содержимого, поэтому она все равно получит место, необходимое для правильного отображения объекта.

Этот пример может быть изменен в зависимости от ситуации. Например, это может отличаться для разных макетов контейнеров, где вы можете разместить свою панель прокрутки.

Другие вопросы по тегам