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
    }

  }
}
4

2 に答える 2

0

これは、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
    }

  }
}
于 2012-10-26T07:55:17.093 に答える
0

私もSwingの専門家ではありませんが、パネルにコンテンツがない場合、パネルがスペースを占有しないように見えます(別の回答で示されているように)。はpreferredSizeおそらく、コンテンツによってパネルがそれを超えるように強制される場合にのみ関連しますpreferredSizeminimumSizemaximumSizeを同じ値に設定すると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
}

不思議なことに、プロパティの 1 つを指定する必要がありますpreferredSize。そうしないと、ウィンドウが何にもまたがらず、表示されるのはアプリケーションのタイトル バーだけだからです。

于 2012-10-26T08:08:19.417 に答える