2

我正在使用GroupLayout我的主要布局,并且基线对齐工作正常,直到我添加内部面板。基线似乎没有通过这些面板传播:虽然直接添加到面板的所有按钮、标签等都GroupLayout相对于它们的基线正确对齐,但内部面板内的组件却不是。

由于 Scala Swing 出人意料地没有GroupPanel,所以我使用的是Andreas Flierl的,但这并不重要,因为我确信这是基础 Swing 类以及如何调节它们的问题。

import swing._
import eu.flierl.grouppanel.GroupPanel

val f = new Frame {
  contents = new GroupPanel {
    val but = new Button { text = "button" }
    val lb  = new Label  { text = "label"  }
    val inner = new FlowPanel {
       contents += new Button { text = "ibut" }
       contents += new Label  { text = "ilab" }
    }
    theHorizontalLayout is Sequential        (but, lb, inner)
    theVerticalLayout   is Parallel(Baseline)(but, lb, inner)
  }
  centerOnScreen()
  pack()
  open()
}

请注意在屏幕截图中,内部面板如何与底部而不是基线对齐。此问题与用于子面板的布局管理器无关(它可能是另一个组布局)。

截屏

4

1 回答 1

0

看来,getBaseline必须覆盖底层对等点。太糟糕了,在 Scala Swing 中没有钩子(也许是因为它会使其依赖于 Java 1.6?)

val f = new Frame {
  contents = new GroupPanel {
    val but = new Button { text = "button" }
    val lb  = new Label  { text = "label"  }
    val inner = new FlowPanel {
      val b = new Button { text = "ibut" } 
      override lazy val peer: javax.swing.JPanel =
        new javax.swing.JPanel(new java.awt.FlowLayout(1)) with SuperMixin {
          override def getBaseline(w: Int, h: Int): Int =
            b.peer.getBaseline(w, h) + getInsets().top
        }
      // vGap = 0
      contents += b
      contents += new Label { text = "ilab" }
    }
    theHorizontalLayout is Sequential(but, lb, inner)
    theVerticalLayout is Parallel(Baseline)(but, lb, inner)
  }
  centerOnScreen()
  pack()
  open()
}
于 2011-07-27T23:12:28.830 回答