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