2010-09-15 107 views
1

我嘗試使用三個ComboBox實現日期選擇,如下所示。更改Scala Swing組合框項目

contents += new Label("Selected Date:") 
val dayBox = new ComboBox(1 to 31) 
contents += dayBox 
val monthBox = new ComboBox(List("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")) 
contents += monthBox 
listenTo(monthBox.selection) 
reactions += { 
    case SelectionChanged(`monthBox`) => Dialog.showMessage(ui, "Month changed.") 
} 
contents += new ComboBox(2011 to 2020) 

如何在更改monthBox時更改dayBox中的項目?我知道Dialog.showMessage部分應該改變。但我想知道如何?

例如,當我更改爲一月,三月,五月,七月,八月,十月,十二月,白天應顯示31,而30除了其他28二月

回答

4

你必須使用peer在ComboBoxJComboBox對象更改的項目在它:

scala> import swing.ComboBox 
import swing.ComboBox 

scala> val cb = new ComboBox(1 to 31) 
cb: scala.swing.ComboBox[Int] = scala.swing wrapper scala.swing.ComboBox$$anon$1[...] 

scala> cb.peer.getModel.getSize 
res6: Int = 31 

scala> cb.peer.setModel(ComboBox.newConstantModel(1 to 30)) 

scala> cb.peer.getModel.getSize 
res8: Int = 30 
+0

abhin4v感謝。這解決了問題。 – JohanSJA 2010-09-15 08:24:16

+0

從Java 7 Swing的scala 2.11.1開始,這會導致編譯器崩潰。可能的解決方法是重新創建整個組合框,將其重新插入佈局並調用this.revalidate()。 – Emiswelt 2014-07-23 19:19:16

相關問題