2010-09-15 6 views
1

J'ai essayé d'implémenter une sélection de date en utilisant trois ComboBox comme indiqué ci-dessous.Modification des éléments 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) 

Comment puis-je modifier les éléments dans dayBox pendant que je change le monthBox? Je savais que la partie Dialog.showMessage devait être modifiée. Mais je me demande comment?

Par exemple, quand je change Jan, Mar, mai, juillet, août, octobre, décembre, la journée devrait afficher 31, tandis que 30 pour d'autres, sauf 28 pour février

Répondre

4

Vous devez utiliser le peer JComboBox objet de la ComboBox pour changer les éléments qu'il:

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 merci. Cela a résolu le problème. – JohanSJA

+0

A partir de la version 2.11.1 de Scala avec Java 7 Swing, cela provoque un plantage du compilateur. Une solution de contournement possible est de recréer la zone de liste déroulante entière, réinsérez-la dans la disposition et appelez this.revalidate(). – Emiswelt

Questions connexes