2012-01-21 5 views
2

MigLayout을 LayoutManager로 사용하는 구성 요소가 있습니다. JScrollPane 내부에서 확장되어 사용 가능한 전체 너비를 차지하도록 설정됩니다. 따라서, 어플리케이션의 프레임의 사이즈를 변경하면 (자), JScrollPane는 프레임과 안쪽의 컴퍼넌트도 같은 넓이가됩니다.JScrollPane 내의 MigLayout 구성 요소의 강제 축소

그러나 프레임을 축소하면 JScrollPane 내부의 증가 된 구성 요소가 너비를 유지하고 축소되지 않으므로 가로 스크롤 막대가 표시됩니다.

JScrollpane needs to shrink its width을 알고 있고 getScrollableTracksViewportWidth = true로 스크롤 가능 인터페이스를 구현했지만 MigLayout이이를 준수하지 않는 것 같습니다.

어떤 조언이 필요합니까? 덕분에

답변

3

다음 스칼라 스 니펫으로 해결했습니다. 스칼라의 스크롤이를 게시

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

관련 문제