为什么我的背景颜色不显示?
不知道为什么我的背景颜色没有出现? 我在每个面板中设置不透明度,是否必须在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
}
}
}
我不是一个Swing专家要么,但它看起来好像面板,如果他们没有任何内容(由另一个答案如图所示),不占用空间。 preferredSize
可能只与内容会强制面板超过preferredSize
有关。您可以将minimumSize
和maximumSize
设置为相同的值,从而迫使BoxPanel
占用这么多空间,但它当然会使布局非常静态。
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
属性之一,因为窗口,否则将不跨越任何东西,你看到的是应用程序的标题栏。
这比其他答案更有帮助,因为它说明了每个尺寸属性是如何实际使用的。静态布局它现在是一个可以接受的解决方案,因为我刚开始学习Scala的所有swing工作原理。 – NickAbbey
我认为这是因为没有组件int dealerPanel,botPlayerPanel和humanPlayerPanel,所以背景颜色不显示。如果你在每个面板上添加一些东西,那么颜色就会出现。例如,我加了标签:
var label = new Label("dealer panel")
label.foreground = new java.awt.Color(255,255,255)
contents += label
没有与大小和布局问题,以及问题的,可能是一部分。
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
}
}
}
是的,当向面板添加组件时,我会得到相同的结果。谢谢! – NickAbbey
我认为这是更多的情况下你的内部boxpanels没有被绘制在你想要的大小。如果您尝试将它们添加到“BorderPanel”,那么您会看到正确的颜色。我不知道这是从BoxLayout预期的行为。 –