2010-08-09 3 views
1

J'essaye de faire de petits ajouts à du vieux code java qui ne supporte pas le swing. J'ai besoin d'ajouter une petite boîte de dialogue qui contient un panneau qui a une case à cocher et quelques champs de texte. Lorsque l'utilisateur clique sur la case à cocher, je veux désactiver ou activer les cases à cocher. Cette partie semble bien fonctionner mais les champs de texte ne sont pas correctement redessinés. Lorsque je clique sur la case, les champs n'apparaissent pas activés mais si je clique ensuite sur le panneau ou le champ de texte, vous voyez qu'ils sont activés (l'inverse est également vrai, lorsque je décoche la case, les champs restent activés) jusqu'à ce que vous essayez et cliquez sur eux et ils deviennent fantômes et ne deviennent pas sélectionnés). J'utilise setEnabled (boolean) pour définir l'état des champs. J'ai essayé d'appeler repaint et de valider sur les deux champs et le panneau après avoir changé le statut et cela ne semble pas fonctionner. J'ai également essayé de faire en sorte que les champs demandent la mise au point et cela n'a pas fonctionné. Quelqu'un a d'autres idées?Problèmes de repeinte AWT

//The class that contains all of this is of type Window 
//Declaration of the components 
    private Panel _inputPanel; 
    private TextField min , max; 
//This method adds to two text fields 
public void addMinMaxtextFields(String min, String max) { 
    TextField minField = new TextField(min); 
    TextField maxField = new TextField(max); 

    this.min = minField; 
    this.max = maxField; 
    this.min.setEnabled(false); 
    this.max.setEnabled(false); 
    _inputPanel.add(minField); 

    _inputPanel.add(maxField); 


} 
//listener for the checkbox 
public void itemStateChanged(ItemEvent e) { 
    Component[] components = _inputPanel.getComponents(); 

    min.setEnabled(!min.isEnabled()); 
    min.setVisible(true); 
    min.validate(); 
    min.repaint(); 

    _inputPanel.validate(); 
    _inputPanel.repaint(); 
    this.pack(); 

    this.setSize(this.getWidth(), this.getHeight()); 

    this.validate(); 

    this.repaint(); 
    /* do nothing */ 
} 
+0

Pouvez-vous ajouter des extraits de code? –

+0

Désolé j'ai eu une urgence et ont été absent, j'ai ajouté les extraits de code. – Mike2012

Répondre

1

Vous devrez appeler update (Graphics g) sur Panel après l'appel de setEnabled (boolean).

chèque: http://download-llnw.oracle.com/javase/1.4.2/docs/api/java/awt/Container.html#update(java.awt.Graphics)

J'ai essayé code suivant (construit à partir du code que vous avez fourni), Son fonctionne bien.

import java.awt.Checkbox; 
import java.awt.Component; 
import java.awt.Dialog; 
import java.awt.Frame; 
import java.awt.Panel; 
import java.awt.TextField; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 

public class CheckUI extends Dialog implements ItemListener { 

    // The class that contains all of this is of type Window 
    // Declaration of the components 
    private Panel _inputPanel; 
    private TextField min, max; 
    private Checkbox cb; 

    public CheckUI(Frame owner, boolean modal) { 
     super(owner, modal); 
     _inputPanel = new Panel(); 

     this.add(_inputPanel); 
     addMinMaxtextFields("min", "max"); 
    } 


    // This method adds to two text fields 
    public void addMinMaxtextFields(String min, String max) { 
     cb = new Checkbox(); 
     cb.addItemListener(this); 
     TextField minField = new TextField(min); 
     TextField maxField = new TextField(max); 

     this.min = minField; 
     this.max = maxField; 
     this.min.setEnabled(false); 
     this.max.setEnabled(false); 
     _inputPanel.add(minField); 

     _inputPanel.add(maxField); 
     _inputPanel.add(cb); 

    } 

    // listener for the checkbox 
    public void itemStateChanged(ItemEvent e) { 
     Component[] components = _inputPanel.getComponents(); 

     min.setEnabled(!min.isEnabled()); 
     min.setVisible(true); 
     min.validate(); 
     min.repaint(); 

     _inputPanel.validate(); 
     _inputPanel.repaint(); 
     this.pack(); 

     this.setSize(this.getWidth(), this.getHeight()); 

     this.validate(); 

     this.repaint(); 
     /* do nothing */ 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     Frame parent = new Frame(); 
     parent.setVisible(true); 
     parent.setExtendedState(Frame.MAXIMIZED_BOTH); 
     parent.pack(); 

     CheckUI ui = new CheckUI(parent, true); 
     ui.pack(); 
     ui.setVisible(true); 

    } 

} 
+0

Hmm ça n'a pas l'air de faire l'affaire. Merci pour vos conseils cependant. – Mike2012

+0

@ Mike2012 Pouvez-vous s'il vous plaît partager votre code? – YoK

+0

@ Mike2012 Je ne pense pas que ce code est complet. J'ai également besoin de comprendre le code lié checkbox qui est complètement manquant. – YoK