Принудительное сжатие 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
}
Другие вопросы по тегам