2010-09-15 81 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