Java JScrollPane内MigLayout组件的强制收缩

Java JScrollPane内MigLayout组件的强制收缩,java,swing,miglayout,shrink,autogrow,Java,Swing,Miglayout,Shrink,Autogrow,我有一个组件,它使用MigLayout作为它的LayoutManager。它被设置为在JScrollPane内部增长,以占据整个可用宽度。因此,如果我调整应用程序框架的大小,JScrollPane与框架一样宽,内部组件也一样宽 但是,当我收缩框架时,JScrollPane中增长的组件只是保持其宽度而不收缩,因此会显示水平滚动条 我知道并用getScrollableTracksViewportWidth=true实现了Scrollable接口,但MigLayout似乎并不认可它 有什么建议吗?谢谢

我有一个组件,它使用MigLayout作为它的LayoutManager。它被设置为在JScrollPane内部增长,以占据整个可用宽度。因此,如果我调整应用程序框架的大小,JScrollPane与框架一样宽,内部组件也一样宽

但是,当我收缩框架时,JScrollPane中增长的组件只是保持其宽度而不收缩,因此会显示水平滚动条

我知道并用getScrollableTracksViewportWidth=true实现了Scrollable接口,但MigLayout似乎并不认可它


有什么建议吗?谢谢

我用下面的scala代码片段解决了这个问题。Scala的Scrollable只是一个伪包装器,您应该实现Java Scrollable

import javax.swing.JPanel
import javax.swing.{Scrollable => JScrollable}
import javax.swing.BoxLayout
import java.awt.Dimension
import java.awt.Rectangle
import scala.swing.SequentialContainer
import scala.swing.Orientation
import scala.swing.Scrollable
import scala.swing.Panel

class ScrollablePanel extends Panel with SequentialContainer.Wrapper with Scrollable.Wrapper {

  var scrollIncrement: Int = 10
  var blockScrollIncrement: Int = 50

  val allowVerticalScrolling: Boolean   = true
  val allowHorizontalScrolling: Boolean = false

  override lazy val peer = new JPanel with SuperMixin with JScrollable {
    def getPreferredScrollableViewportSize: Dimension =
      getPreferredSize

    def getScrollableTracksViewportHeight: Boolean =
      !allowVerticalScrolling

    def getScrollableTracksViewportWidth: Boolean =
      !allowHorizontalScrolling

    def getScrollableBlockIncrement(visibleRect: Rectangle, orientation: Int, direction: Int): Int =
      scrollIncrement

    def getScrollableUnitIncrement(visibleRect: Rectangle, orientation: Int, direction: Int): Int =
      blockScrollIncrement
  }

  final protected def scrollablePeer: JScrollable = peer
}

谢谢你发布这个,这正是我自己的项目所需要的答案。