2009-04-22 6 views
0

J'ai le code Groovy + SwingBuilder suivant.Groovy: Comment accéder aux objets avec le tag Id?

Dans un panneau, je génère des cases à cocher et dans un autre panneau je veux accéder aux valeurs des cases à cocher. Le code ressemble aime essentiellement ceci:

def optionsmap = [ foo : "value_foo", bar : "value_bar"] 

SwingBuilder.build()  
{ 
    frame(title:'demo1', size:[400,700], visible:true, defaultCloseOperation:WC.EXIT_ON_CLOSE) {     
     gridLayout(rows: 1, cols: 2) 

     panel(id:'optionPanel', constraints:java.awt.BorderLayout.CENTER) {       
     gridLayout(rows: 5, cols: 1)     
     myGroup = buttonGroup();  
     for (entry in optionsmap) 
     {   
      checkBox(id: entry.key, text: entry.value  )     
     }    
     } 

     panel(constraints:java.awt.BorderLayout.WEST) { 

     button ('Show values', actionPerformed: {   
     for (entry in optionsmap) 
     { 
      println (entry.key as Class).text    
     }   
     })     
    } 
    } 
} 

optionsmap est une carte avec (id, texte) paires qui peuvent être étendues.

Lorsque je presse présentent des valeurs je reçois un message d'erreur:

org.codehaus.groovy.runtime.typehandling.GroovyCastException: Impossible cast objet 'foo' avec la classe « java.lang.String «à la classe « java.lang.Class »

Comment pourrais-je accéder aux cases à cocher pour mon action dans le second panneau en utilisant la case à cocher ids de optionsmap?

+0

Qu'est-ce, exactement, voulez-vous dire par « ne fonctionne pas »? Est-ce que ça plante? Est-ce que cela ne produit peut-être que ceux qui sont vérifiés? Sont-ils tous non sélectionnés? Comment liez-vous les données dans le formulaire du panel précédent? S'il vous plaît soyez plus complet. – billjamesdev

Répondre

0

La solution pour accéder aux variables de la carte est comme ceci:


       for (entry in optionsmap) 
       { 
         if (variables[entry.key].selected) 
          println variables[entry.key].text 
     } 
Questions connexes