Java JScrollPane内MigLayout组件的强制收缩
我有一个组件,它使用MigLayout作为它的LayoutManager。它被设置为在JScrollPane内部增长,以占据整个可用宽度。因此,如果我调整应用程序框架的大小,JScrollPane与框架一样宽,内部组件也一样宽 但是,当我收缩框架时,JScrollPane中增长的组件只是保持其宽度而不收缩,因此会显示水平滚动条 我知道并用getScrollableTracksViewportWidth=true实现了Scrollable接口,但MigLayout似乎并不认可它Java JScrollPane内MigLayout组件的强制收缩,java,swing,miglayout,shrink,autogrow,Java,Swing,Miglayout,Shrink,Autogrow,我有一个组件,它使用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
}
谢谢你发布这个,这正是我自己的项目所需要的答案。