由于需要,panel使用空布局管理器,由绝对坐标指定各控件位置。将panel放入一个JScrollPane对象scrollPane中,再将scrollPane放入frame的content pane里,此时滚动条不起作用。若panel使用一个布局管理器,则滚动条起作用。 如果在panel不使用布局管理器的情况下使用滚动条?

解决方案 »

  1.   

    我想panel使用了布局管理器,它会使用首选尺寸计算自己的大小。
    如果你使用空的布局,你就要自己设置panel的size了,如果他的size大于scrollpane的size也会出滚动条的,可能是这样吧。
      

  2.   

    应该是preferredSize的问题,楼主试试
      

  3.   

    谢谢ls几位,用setPreferredSize()后可以了,不过又有新问题了我的需求是根据有向图结构生成一个图形化显示,包含顶点和有向边。目前的方法是用一个空布局管理器的panel,将顶点用label画出,并用label.setBounds()指定顶点位置。后对label加入了拖拽功能。但此时若将label拖到frame大小的外面,则显示不出也无法拖回了。
    于是想使用scrollpane加入滚动条功能,即假设当前panel的大小是100×100,frame除去边框外大小和panel相同,拖动一个label到x=200处,则panel大小变为200×100,frame不变,并能用滚动条看到整个panel。但既然要手动设定preferredsize才能使用滚动条,下面的工作在我看来就相当繁琐了。
    也就是说要记录最上,最下,最左,最右的label,若拖拽的label超过了这个界限,就要计算超出量并setPreferredSize();若将当前的边界label向中心拖拽,也要setPreferredSize()。这还没有考虑多个label同在边界线上的情况。不知道有没有人遇到这个问题,想讨论一下简单点的方法。