2014-11-01 62 views
0

在下面的scala代码中,我将前景,horizo​​ntalAlignment和背景更改为某些值。但是在GUI中,这些属性不显示。scala swing元素的属性

horizo​​ntalAlignment保持居中。 背景保持灰色。 但是,前景(字体颜色)根据值更改。 如何获得所需的效果?

感谢您的帮助!

import scala.swing._ 

object GuiTest extends SimpleSwingApplication { 
    def top = new MainFrame { 
    title = "Label Test" 
    val tempList = List("Celsius", "Fahrenheit", "Kelvin") 
    contents = bagPnl(tempList) 
    val fields = contents(0).peer.getComponents 
    val valuefields 
    = for (f <- 0 until fields.length/2) 
    yield tempList(f) -> fields.apply(2 * f + 1).asInstanceOf[javax.swing.JLabel] 
    val tfm = valuefields.toMap[String, javax.swing.JLabel] 
    tfm.apply("Celsius").setText("35°C") 
    tfm.apply("Kelvin").setText("0 K") 
    } 

    def bagPnl(list: List[String]) = new GridBagPanel { 
    val gbc = new Constraints 
    gbc.insets = new Insets(3, 3, 3, 3) 
    var l = 0 
    for (title <- list) { 
     gbc.gridy = l 
     gbc.gridx = 0 
     /* title label */ 
     add(new Label { 
     horizontalAlignment = Alignment.Left 
     foreground = java.awt.Color.RED 
     background = java.awt.Color.CYAN 
     text = title 
     }, gbc) 
     gbc.gridx = 1 
     /* value label */ 
     val t = new Label { 
     horizontalAlignment = Alignment.Right 
     foreground = java.awt.Color.BLUE 
     background = java.awt.Color.YELLOW 
     name = title 
     } 
     t.background = java.awt.Color.GREEN 
     add(t, gbc) 
     l = l + 1 
    } 
    } 
} 

抱歉,我不能发表图片尚未:-(

回答

0

GridBagLayout是一个布局管理器的一个地狱。你是可能更好的与GroupLayout,但目前还没有相关的面板类型阶摆幅爱好。(Here的示例)。

标签定位是,它的对准仅使得当它被赋予比其优选尺寸更大的空间感的问题。默认情况下,网格包布局没有按给它更多的空间,并且居中是一回事它自己的对齐方式(不是标签)。这里最简单的是指定的组件最多可以使用的水平空间(如果可用):

gbc.fill = GridBagPanel.Fill.Horizontal 

第二个问题涉及标签的背景颜色。 Here是一个相关的问题。总之,默认情况下,标签是透明的,并忽略其背景颜色。您可以切换为不透明的绘画:

new Label { 
    ... 
    opaque = true 
} 
+0

谢谢您的回答! yes设置opaque = true有助于 ,并且在将preferredSize设置为Dimension之后,我发现了标签对齐。 我同意GridBagLayout不是最简单的布局管理器。 – HoWei 2014-11-03 20:52:48

+0

很好用。如果你的问题解决了,你应该通过检查答案来标记它。 – 2014-11-03 21:28:42