2012-10-26 61 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