2011-04-21 9 views
0

Je suis en train de développer une petite application de retouche photo et j'aimerais que les JButtons soient désactivés jusqu'à ce que l'utilisateur charge une image, point auquel je veux que les boutons soient activés (cliquables). Ma pensée était d'ajouter un imageFond booléen, et une méthode de vérificateur d'image. Si boolean est false, les boutons sont désactivés et s'ils sont vrais, ils sont activés (le booléen est défini sur true dans la méthode load image actionPerformed). Le problème est que lorsque vous utilisez l'application, les boutons sont désactivés comme ils devraient l'être, mais quand je charge l'image, ils sont toujours désactivés. Je ne sais pas si peut-être je manque un morceau de code pour revérifier si l'image est disponible, permettant ainsi les boutons (à l'exécution ofc). Merci pour toute aide.Activation/Désactivation de JButtons

...BufferedImage effects = null; 
boolean bmpFound = false; 


public GUI() 
{   
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
    this.initComponents(); 
    this.bmpChecker(); 
    this.addListeners();   
    this.setTitle("PicTweak"); 
    this.setSize(900, 600); 
    this.setVisible(true); 
} 

...else if(e.getSource() == loadItem) 
    {    
     try 
     { 
      imagePath = DialogIO.displayOpenDialog(); 
      effects = ImageInOut.loadImage(imagePath);     
      imageHolder.setIcon(new ImageIcon(effects)); 
      bmpFound = true; 
     } 

....public void bmpChecker() 
{ 
    if(bmpFound) 
    { 
     grayScale.setEnabled(true); 
     blur.setEnabled(true); 
     reset.setEnabled(true); 
     brightDark.setEnabled(true); 
     horFlip.setEnabled(true); 
     verFlip.setEnabled(true); 
     verHorFlip.setEnabled(true); 
    } 
    else 
    { 
     grayScale.setEnabled(false); 
     blur.setEnabled(false); 
     reset.setEnabled(false); 
     brightDark.setEnabled(false); 
     horFlip.setEnabled(false); 
     verFlip.setEnabled(false); 
     verHorFlip.setEnabled(false); 
    } 
} 
+2

Qu'en est-il montrant un code? – Rom1

+0

Un extrait de code serait utile. – shihpeng

+1

-1 'du code' ou un 'fragment de code'. +1 [SSCCE] (http://pscode.org/sscce.html). –

Répondre

5

Lorsque vous charger/décharger l'image, appelez bmpChecker() après, à savoir

... 
try 
{ 
    imagePath = DialogIO.displayOpenDialog(); 
    effects = ImageInOut.loadImage(imagePath);     
    imageHolder.setIcon(new ImageIcon(effects)); 
    bmpFound = true; 
    bmpChecker(); 
} 
... 

Une meilleure alternative serait t ajouter des écouteurs pour le chargement de l'image, par exemple pour chaque contrôle ou un groupe de contrôle qui a besoin Pour mettre à jour son état en conséquence, vous devez enregistrer un écouteur qui est averti chaque fois qu'une image est chargée ou déchargée. L'écouteur pourrait alors déclencher les mises à jour des contrôles correspondants.

Quelque chose comme:

class ImageEvent { 
    private boolean imageLoaded; //plus getter/setter and maybe initialized in constructor 
}  

interface ImageListener { 
    void imageChanged(ImageEvent e); 
} 

... 

List<ImageListener> listeners; 

... 

try 
{ 
    imagePath = DialogIO.displayOpenDialog(); 
    effects = ImageInOut.loadImage(imagePath);     
    imageHolder.setIcon(new ImageIcon(effects)); 
    bmpFound = true; 

    ImageEvent imgageEvent = new ImageEvent(); 
    imageEvent.setImageLoaded(true); 

    for(ImageListener l : listeners) { 
     l.imageChanged(imageEvent); 
    } 
} 

... 

Et un écouteur d'exemple:

class JButtonImageListener implements ImageListener { 
    private JButton button; //plus getter/setter 

    public void imageChanged(ImageEvent e) { 
    button.setEnabled(e.isImageLoaded()); 
    } 
} 
+0

Merci beaucoup, très apprécié! :RÉ – Darren