Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 启用/禁用JButtons_Java_Swing_Jbutton - Fatal编程技术网

Java 启用/禁用JButtons

Java 启用/禁用JButtons,java,swing,jbutton,Java,Swing,Jbutton,我正在开发一个小型照片编辑应用程序,希望在用户加载图像之前禁用JButtons,此时我希望按钮处于启用状态(可单击)。我的想法是添加一个布尔imageFound和一个图像检查器方法。如果布尔值为false,则禁用按钮,如果为true,则启用按钮(在load image actionPerformed方法中将布尔值设置为true)。我遇到的问题是,当运行应用程序时,按钮被禁用,但当我加载图像时,它们仍然会被禁用。我不知道我是否缺少任何代码来重新检查图像是否可用,从而启用按钮(在ofc运行时)。谢谢

我正在开发一个小型照片编辑应用程序,希望在用户加载图像之前禁用JButtons,此时我希望按钮处于启用状态(可单击)。我的想法是添加一个布尔imageFound和一个图像检查器方法。如果布尔值为false,则禁用按钮,如果为true,则启用按钮(在load image actionPerformed方法中将布尔值设置为true)。我遇到的问题是,当运行应用程序时,按钮被禁用,但当我加载图像时,它们仍然会被禁用。我不知道我是否缺少任何代码来重新检查图像是否可用,从而启用按钮(在ofc运行时)。谢谢你的帮助

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

加载/卸载图像时,请稍后调用
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);
    }
}

...

加载/卸载图像时,请稍后调用
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);
    }
}

...

展示一些代码怎么样?一些代码片段会很有帮助。-1“一些代码”或“代码片段”+1.展示一些代码怎么样?一些代码片段会有帮助。-1“一些代码”或“代码片段”+1.非常感谢,非常感谢!:D非常感谢,非常感谢!:D