Swing 使用GroupLayout和嵌套面板打破基线
我将Swing 使用GroupLayout和嵌套面板打破基线,swing,scala,grouplayout,baseline,Swing,Scala,Grouplayout,Baseline,我将GroupLayout用于我的主布局,基线对齐工作正常,直到添加内部面板。基线似乎没有通过这些面板传播:虽然使用GroupLayout直接添加到面板的所有按钮、标签等都与其基线正确对齐,但内部面板内的组件没有对齐 由于Scala Swing没有一个GroupPanel,我使用的是来自的,但这并不重要,因为我确信这是底层Swing类的问题以及如何调节它们 import swing._ import eu.flierl.grouppanel.GroupPanel val f = new Fra
GroupLayout
用于我的主布局,基线对齐工作正常,直到添加内部面板。基线似乎没有通过这些面板传播:虽然使用GroupLayout
直接添加到面板的所有按钮、标签等都与其基线正确对齐,但内部面板内的组件没有对齐
由于Scala Swing没有一个GroupPanel
,我使用的是来自的,但这并不重要,因为我确信这是底层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()
}
请注意,在屏幕截图中,内面板如何与底部对齐,而不是与基线对齐。此问题与用于子面板的布局管理器无关(它可能是另一个组布局)
看来,必须覆盖底层对等方的
getBaseline
。太糟糕了,Scala Swing中没有用于此的钩子(可能是因为它会使它依赖Java1.6?)
似乎必须覆盖底层对等方的
getBaseline
。太糟糕了,Scala Swing中没有用于此的钩子(可能是因为它会使它依赖Java1.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()
}