【问题标题】:JScrollPane JScrollBar accommodationJScrollPane JScrollBar 住宿
【发布时间】:2013-09-27 02:29:18
【问题描述】:

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

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

我想在 JScrollPane 出现时加宽整个 JScrollPane,这样 Object 的最右边就不会被 JScrollBars 挡住,反之亦然。

【问题讨论】:

    标签: java swing jscrollpane jscrollbar preferredsize


    【解决方案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. ...滚动窗格根据其实际内容首选宽度返回修改后的首选宽度,因此它仍将获得正确显示对象所需的位置。

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

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      相关资源
      最近更新 更多