Принудительное сжатие MigLayout-Component внутри JScrollPane - PullRequest
2 голосов
/ 21 января 2012

У меня есть компонент, который использует MigLayout в качестве LayoutManager. Он установлен для увеличения внутри JScrollPane, чтобы занимать всю доступную ширину. Поэтому, если я изменю размер фрейма приложения, JScrollPane будет такой же ширины, как фрейм, а также внутреннего компонента.

Однако, когда я сжимаю рамку, растущий компонент внутри JScrollPane просто сохраняет свою ширину и не сжимается, поэтому отображаются горизонтальные полосы прокрутки.

Мне известно о JScrollpane нужно уменьшить его ширину и реализовал Scrollable-интерфейс с getScrollableTracksViewportWidth = true, но MigLayout, похоже, не соблюдает его.

Любой совет? спасибо

1 Ответ

3 голосов
/ 31 января 2012

Я решил это с помощью следующего фрагмента кода.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
}
...