2012-10-26 58 views
2

不知道为什么我的背景颜色没有出现? 我在每个面板中设置不透明度,是否必须在MainFrame内容部分做其他操作?为什么我的背景颜色不显示?

// See http://www.artima.com/pins1ed/gui-programming.html 
import scala.swing._ 
import java.awt.Color 

object SecondSwingApp extends SimpleGUIApplication { 
    def top = new MainFrame { 
    title = "Second Swing App" 

    val dealerPanel = new BoxPanel(Orientation.Horizontal) { 
     background = new java.awt.Color(35, 125, 35) 
     preferredSize = new java.awt.Dimension(800, 200) 
     opaque = true 
    } 

    val botPlayerPanel = new BoxPanel(Orientation.Horizontal) { 
     background = new java.awt.Color(35, 125, 125) 
     preferredSize = new java.awt.Dimension(800, 200) 
     opaque = true 
    } 

    val humanPlayerPanel = new BoxPanel(Orientation.Horizontal) { 
     background = new java.awt.Color(125, 125, 35) 
     preferredSize = new java.awt.Dimension(800, 200) 
     opaque = true 
    } 

    contents = new BoxPanel(Orientation.Vertical) { 
     contents += dealerPanel 
     contents += botPlayerPanel 
     contents += humanPlayerPanel 
    } 

    } 
} 
+0

我认为这是更多的情况下你的内部boxpanels没有被绘制在你想要的大小。如果您尝试将它们添加到“BorderPanel”,那么您会看到正确的颜色。我不知道这是从BoxLayout预期的行为。 –

回答

0

我不是一个Swing专家要么,但它看起来好像面板,如果他们没有任何内容(由另一个答案如图所示),不占用空间。 preferredSize可能只与内容会强制面板超过preferredSize有关。您可以将minimumSizemaximumSize设置为相同的值,从而迫使BoxPanel占用这么多空间,但它当然会使布局非常静态。

enter image description here

val dealerPanel = new BoxPanel(Orientation.Horizontal) { 
    background = new java.awt.Color(35, 125, 35) 
    // preferredSize = new java.awt.Dimension(800, 200) 
    minimumSize = new Dimension(100, 50) 
    maximumSize = minimumSize 
    opaque = true 
} 

val botPlayerPanel = new BoxPanel(Orientation.Horizontal) { 
    background = new java.awt.Color(35, 125, 125) 
    preferredSize = new java.awt.Dimension(800, 200) 
    minimumSize = new Dimension(50, 100) 
    maximumSize = minimumSize 
    opaque = true 
} 

val humanPlayerPanel = new BoxPanel(Orientation.Horizontal) { 
    background = new java.awt.Color(125, 125, 35) 
    // preferredSize = new java.awt.Dimension(800, 200) 
    minimumSize = new Dimension(200, 20) 
    maximumSize = minimumSize 
    opaque = true 
} 

奇怪的是,你还需要指定preferredSize属性之一,因为窗口,否则将不跨越任何东西,你看到的是应用程序的标题栏。

+1

这比其他答案更有帮助,因为它说明了每个尺寸属性是如何实际使用的。静态布局它现在是一个可以接受的解决方案,因为我刚开始学习Scala的所有swing工作原理。 – NickAbbey

0

我认为这是因为没有组件int dealerPanel,botPlayerPanel和humanPlayerPanel,所以背景颜色不显示。如果你在每个面板上添加一些东西,那么颜色就会出现。例如,我加了标签:

var label = new Label("dealer panel") 
label.foreground = new java.awt.Color(255,255,255) 
contents += label 

enter image description here

没有与大小和布局问题,以及问题的,可能是一部分。

import scala.swing._ 
import java.awt.Color 

object SecondSwingApp extends SimpleGUIApplication { 
    def top = new MainFrame { 
    title = "Second Swing App" 

    val dealerPanel = new BoxPanel(Orientation.Horizontal) { 
     background = new Color(35, 125, 35) 
     preferredSize = new java.awt.Dimension(800, 255) 
     var label = new Label("dealer panel") 
     label.foreground = new java.awt.Color(255,255,255) 
     contents += label 
     opaque = true 
    } 

    val botPlayerPanel = new BoxPanel(Orientation.Horizontal) { 
     background = new java.awt.Color(35, 125, 125) 
     preferredSize = new java.awt.Dimension(800, 255) 
     var label = new Label("bot player panel") 
     label.foreground = new java.awt.Color(255,255,255) 
     contents += label 
     opaque = true 
    } 

    val humanPlayerPanel = new BoxPanel(Orientation.Horizontal) { 
     background = new java.awt.Color(125, 125, 35) 
     preferredSize = new java.awt.Dimension(800, 255) 
     var label = new Label("human player panel") 
     label.foreground = new java.awt.Color(255,255,255) 
     contents += label 
     opaque = true 
    } 

    contents = new BoxPanel(Orientation.Vertical) { 
     contents += dealerPanel 
     contents += botPlayerPanel 
     contents += humanPlayerPanel 
    } 

    } 
} 
+0

是的,当向面板添加组件时,我会得到相同的结果。谢谢! – NickAbbey