2012-01-21 22 views
2

MigLayoutをLayoutManagerとして使用するコンポーネントがあります。使用可能な幅全体を占めるようにJScrollPane内で拡大するように設定されています。したがって、アプリケーションのフレームのサイズを変更すると、JScrollPaneの幅はフレームの幅になり、内側のコンポーネントも同じになります。JScrollPane内のMigLayoutコンポーネントの強制縮小

しかし、私がフレームを縮小すると、JScrollPaneの内部の拡大されたコンポーネントは幅を維持して縮小しないので、水平スクロールバーが表示されます。

私はJScrollpane needs to shrink its widthを認識しており、getScrollableTracksViewportWidth = trueのScrollable-Interfaceを実装しましたが、MigLayoutはそれを尊重していないようです。

アドバイスはありますか?ありがとう

答えて

3

私はそれを以下のスカラースニペットで解決しました。 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

関連する問題