2014-11-01 2 views
0

다음 스칼라 코드에서 foreground, horizontalAlignment 및 background를 일부 값으로 변경합니다. 그러나 GUI에서는 이러한 속성이 표시되지 않습니다.스칼라 스윙 요소의 속성

horizontalAlignment는 가운데에 유지됩니다. backgrould는 회색으로 유지됩니다. 그러나 전경 (글꼴 색)은 값에 따라 변경됩니다. 원하는 효과를 얻으려면 어떻게해야합니까?

도움 주셔서 감사합니다.

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 대한 예).

그 정렬은 단지 그것의 원하는 크기보다 더 많은 공간을 주어진 의미가 있다는 것이다 라벨 위치의 문제. 그리드 가방 레이아웃 아무튼 기본적 더 많은 공간을주고, 센터링은 그것의 자신의 정렬의 sult (레이블의).

gbc.fill = GridBagPanel.Fill.Horizontal 

두 번째 질문 라벨배경 색상에 관한 : 여기에 가장 쉬운 구성 요소가 사용 가능한 경우 수평 공간을 사용할 수 있도록 지정하는 것입니다. Here과 관련된 질문입니다. 즉, 기본적으로 레이블은 투명하고 배경색은 무시됩니다. 불투명 한 그림으로 전환 할 수 있습니다.

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

답장을 보내 주셔서 감사합니다. yes setting opaque = true는 을 돕고 preferredSize를 Dimension으로 설정 한 후 레이블이 정렬되었음을 알았습니다. 그리고 GridBagLayout이 가장 쉬운 레이아웃 관리자가 아니라는 데 동의합니다. – HoWei

+0

다행입니다. 질문이 해결되면 답변을 확인하여 표시해야합니다. –