Swing 为什么不显示我的背景色?

Swing 为什么不显示我的背景色?,swing,scala,user-interface,background,Swing,Scala,User Interface,Background,不知道为什么我的背景颜色没有出现? 我在每个面板中设置了不透明度,是否需要在大型机内容部分执行其他操作 // 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 = "Se

不知道为什么我的背景颜色没有出现? 我在每个面板中设置了不透明度,是否需要在大型机内容部分执行其他操作

// 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
    }

  }
}

我认为这是因为DealPanel、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
    }

  }
}

我也不是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
属性,因为窗口将不会覆盖任何内容,您所看到的只是应用程序的标题栏。

我认为这更多的是您的内部箱面板没有按您想要的大小绘制的情况。如果您尝试将它们添加到
边框面板
,则会看到正确的颜色。我不知道这是否是BoxLayout的预期行为。是的,我在向面板添加组件时得到了相同的结果。谢谢这比另一个答案更有帮助,因为它说明了每个大小属性的实际使用方式。静态布局现在是一个可以接受的解决方案,因为我刚刚开始学习如何使用Scala使用所有swing工具。