2012-01-21 39 views
2

我有一个使用MigLayout作为其LayoutManager的Component。它设置为在JScrollPane内部增长以占据整个可用宽度。所以如果我调整appliation的框架,JScrollPane和框架一样宽,内部组件也一样。强制缩小JScrollPane中的MigLayout-Component

但是,当我缩小框架时,JScrollPane内部生长的组件仅保持其宽度并且不缩小,因此显示了水平滚动条。

我知道JScrollpane needs to shrink its width和实现Scrollable-Interface与getScrollableTracksViewportWidth = true,但MigLayout似乎没有兑现它。

有什么建议吗?谢谢

回答

3

我用下面的scala-snippet解决了它。 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 
} 
+0

感谢发布这个,这正是我需要为我自己的项目的答案。 – Talin