Java JScrollPane JScrollBar住宿酒店

Java JScrollPane JScrollBar住宿酒店,java,swing,jscrollpane,jscrollbar,preferredsize,Java,Swing,Jscrollpane,Jscrollbar,Preferredsize,我在JScrollPane中有一个对象。随着对象高度的增加和减少,JScrollBars会出现和消失 有没有办法检测何时发生这种情况 我想在JScrollPane出现时加宽整个JScrollPane,这样对象的最右边部分就不会被JScrollBars阻挡,反之亦然。您可以很容易地听到组件大小的变化,如下所示: JPanel object = new JPanel (); object.addComponentListener ( new ComponentAdapter ()

我在JScrollPane中有一个对象。随着对象高度的增加和减少,JScrollBars会出现和消失

有没有办法检测何时发生这种情况


我想在JScrollPane出现时加宽整个JScrollPane,这样对象的最右边部分就不会被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;
        }
    }
}
这将迫使

  • …组件返回零首选宽度,这样滚动窗格将始终将其收缩到其当前内部视图可用宽度

  • …滚动窗格,根据其实际内容首选宽度返回修改后的首选宽度,以便仍能获得正确显示对象所需的位置

  • 此示例可以根据情况进行修改。例如,对于可能放置滚动窗格的不同容器布局,可能会有所不同