2011-04-21 65 views
0

我正在开发一个小型照片编辑应用程序,并希望在用户加载图像之前禁用JButtons,此时我希望按钮变为启用(可点击)。我的想法是添加一个布尔imageFound和一个图像检查器方法。如果布尔值为false,则禁用按钮,如果为true,则启用它们(在load image actionPerformed方法中将布尔值设置为true)。我遇到的问题是,当运行应用程序,按钮被禁用,因为他们应该是,但是当我加载图像,他们仍然会被禁用。我不知道如果也许我错过了任何一段代码来重新检查图像是否可用,从而启用按钮(在运行时ofc)。谢谢你的帮助。启用/禁用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

约呈现出一些代码是什么? – Rom1 2011-04-21 08:57:50

+0

某些代码段会有帮助。 – shihpeng 2011-04-21 09:02:10

+1

-1'一些代码'或'代码片段'。 +1 [SSCCE](http://pscode.org/sscce.html)。 – 2011-04-21 09:10:47

回答

5

当加载/卸载图像,呼叫bmpChecker()之后,即

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

一个更好的选择将是吨添加侦听器图像加载,即对需要的控制每个控制或组为了相应地更新它的状态,你需要注册一个监听器,当图像被加载或卸载时通知它。监听器可以触发相应控件的更新。

喜欢的东西:

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); 
    } 
} 

... 

和示例监听器:

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

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

非常感谢,非常感谢! :d – Darren 2011-04-21 09:16:34