Включение / отключение кнопок J - PullRequest
0 голосов
/ 21 апреля 2011

Я занимаюсь разработкой небольшого приложения для редактирования фотографий и хотел бы, чтобы кнопки JButtons были отключены до тех пор, пока пользователь не загрузит изображение, после чего я хочу, чтобы кнопки стали активными (щелкающими).Я думал добавить логический метод imageFound и метод проверки изображений.Если логическое значение равно false, кнопки отключены, а если оно истинно, они включены (логическое значение установлено в значение true в методе actionPerformed загрузочного изображения).У меня проблема в том, что при запуске приложения кнопки отключены, как и должно быть, но при загрузке изображения они все равно будут отключены.Я не знаю, возможно, я пропускаю какой-либо фрагмент кода, чтобы перепроверить, доступно ли изображение, таким образом, активируя кнопки (во время выполнения 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);
    }
}

1 Ответ

5 голосов
/ 21 апреля 2011

Когда вы загружаете / выгружаете изображение, после этого вызывайте 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());
   }
}
...