Размещение JScrollPane JScrollBar

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

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

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


person Karlovsky120    schedule 21.09.2013    source источник


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

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

person Mikle Garin    schedule 21.09.2013