Принудительное сжатие MigLayout-Component внутри JScrollPane
У меня есть компонент, который использует MigLayout в качестве LayoutManager. Он настроен на рост внутри JScrollPane, чтобы занимать всю доступную ширину. Поэтому, если я изменю размер фрейма приложения, JScrollPane будет таким же широким, как фрейм, и внутренним компонентом.
Однако, когда я сжимаю рамку, растущий компонент внутри JScrollPane просто сохраняет свою ширину и не сжимается, поэтому отображаются горизонтальные полосы прокрутки.
Я знаю, что JScrollpane нужно уменьшить его ширину, и реализовал Scrollable-интерфейс с getScrollableTracksViewportWidth=true, но MigLayout, похоже, не соблюдает его.
Любой совет? Спасибо
1 ответ
Я решил это с помощью следующего фрагмента кода. 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
}