我在 JScrollPane 中有一个对象。随着对象高度的增加和减少,JScrollBars 出现和消失。
有没有办法检测何时发生这种情况?
我想在它们出现时加宽整个 JScrollPane,以便 Object 不会被 JScrollBars 阻挡其最右边的部分,反之亦然。
我在 JScrollPane 中有一个对象。随着对象高度的增加和减少,JScrollBars 出现和消失。
有没有办法检测何时发生这种情况?
我想在它们出现时加宽整个 JScrollPane,以便 Object 不会被 JScrollBars 阻挡其最右边的部分,反之亦然。
您可以像这样轻松地收听组件大小的变化:
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;
}
}
}
这将迫使...
...组件返回零首选宽度,以便滚动窗格始终将其缩小到其当前内部视图可用宽度。
...滚动窗格以根据其实际内容首选宽度返回修改后的首选宽度,因此它仍将获得正确显示对象所需的位置。
这个例子可以根据情况进行修改。例如,对于您可能放置滚动窗格的不同容器布局,它可能会有所不同。