Некорректная работа программы - Java

Узнай цену своей работы

Формулировка задачи:

Добрый день! Помогите, пожалуйста, исправить ошибку в программе. При нажатии на кнопку "Change Circle" все работает корректно, однако если нажать на "Change Label" меняется не только label, но и цвет круга.
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
 
public class TwoButtons  { // В данный момент главный класс GUI не реализует интерфейс ActionListener
 
    JFrame frame;
    JLabel label;
    
    public static void main(String[] args) { // Главный метод
        TwoButtons gui = new TwoButtons();
        gui.go();
    }   
    public void go() {
        frame = new JFrame(); // Создаем фрейм
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Эта строка завершает работу программы при закрытии окна (если не добавить ее, то приложение будет "висеть" на экране вечно)
        
        JButton labelButton = new JButton("Change Label");
        labelButton.addActionListener(new LabelListener()); // Вместо передачи (this) методу регистрации слушателя кнопки, передаем ему экземпляр соответствующего класса слушателя
        
        JButton colorButton = new JButton("Change Circle");
        colorButton.addActionListener(new ColorListener()); // Вместо передачи (this) методу регистрации слушателя кнопки, передаем ему экземпляр соответствующего класса слушателя
        
        label = new JLabel("I'm a label");
        MyDrawPanel drawPanel = new MyDrawPanel();
        
        frame.getContentPane().add(BorderLayout.SOUTH, colorButton); // Добавляем кнопку на панель фрейма
        frame.getContentPane().add(BorderLayout.CENTER, drawPanel); // Добавляем панель для рисования в область фрейма
        frame.getContentPane().add(BorderLayout.EAST, labelButton);
        frame.getContentPane().add(BorderLayout.WEST, label);
        
        frame.setSize(500, 500); // Изменен размер. Присваиваем фрейму размер (в пикселах)
        frame.setVisible(true); // Делаем фрейм видимым, иначе ничего не увидим при выполнении кода
        
    }
    
    class LabelListener implements ActionListener{
        public void actionPerformed(ActionEvent event) {
        
            label.setText("Ouch!");  // Внутренний класс знает о label
        }
            
    } // Закрываем внутренний класс
    
    class ColorListener implements ActionListener{
        public void actionPerformed(ActionEvent event) {
        
            frame.repaint(); // Внутренний класс использует переменную экземпляра frame без ссылки на объект внешнего класса. Когда пользователь нажимает кнопку, вызываем для фрейма метод repaint(). Это значит, что метод paintComponent() вызывается для каждого виджета во фрейме
        }
    } // Закрываем внутренний класс
}

Решение задачи: «Некорректная работа программы»

textual
Листинг программы
label.setPreferredSize(new Dimension(100, 500));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5