Переключение значения аргумента addMouseListener и addMouseMotionListener по кнопке - Java

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

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

На форме есть 2 взаимовыключающих

togglebtn

(нажимая одну я активирую режим "карандаш", нажимая вторую я активирую режим "линия"). Для рисования произвольных изображения я создал класс

PaintPanel

наследник от

JPanel

, и поместил в него 2 класса:

MyMouseHandler

(рисует карандашом) и

DrawLine

(рисует линии) наследники от

MouseAdapter

. В переопределенном методе setBackground класса PaintPanel создаю экземпляры вышеперечисленных 2х классов рисования и через условия пытаюсь выбирать соответствующий аргумент по нажатию соответствующей кнопки...

Не работает...

public class PaintPanel extends JPanel {
    @Override
    public void setBackground(Color bg) {
        super.setBackground(BACK_COLOR);
 
        setPreferredSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT));
 
        handler = new MyMouseHandler();
        lineHandler = new DrawLine();
 
        if (penToggleBtn.isSelected()) {
        this.addMouseListener(handler);
        this.addMouseMotionListener(handler);
        }
 
        if (lineToggleBtn.isSelected()) {   
        this.addMouseListener(lineHandler);
        this.addMouseMotionListener(lineHandler);
        }
    }
Если комментирую одно из условия, и с оставшегося убираю if, то работает. Подскажите как реализовать эту задумку? Пример кода с

addItemListener

penToggleBtn = new JToggleButton("P");
    penToggleBtn.addItemListener(new ItemListener() {
        public void itemStateChanged(ItemEvent e) {
            brushPanel.addMouseListener(handler);
            brushPanel.addMouseMotionListener(handler);
 
        }
    });
    lineToggleBtn = new JToggleButton("Line");
    lineToggleBtn.addItemListener(new ItemListener() {
        public void itemStateChanged(ItemEvent e) {
            brushPanel.addMouseListener(lineHandler);
 
        }
    });

Решение задачи: «Переключение значения аргумента addMouseListener и addMouseMotionListener по кнопке»

textual
Листинг программы
penToggleBtn = new JToggleButton("Pen");
penToggleBtn.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {           
    brushPanel.removeMouseListener(lineHandler);
    brushPanel.removeMouseMotionListener(lineHandler);
    brushPanel.addMouseListener(handler);
    brushPanel.addMouseMotionListener(handler);
   }
});
penToggleBtn.setPreferredSize(new Dimension(50,26));
buttonsPanel.add(penToggleBtn);
btnGroup.add(penToggleBtn);
 
brushToggleBtn = new JToggleButton("Brush");
brushToggleBtn.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
    brushPanel.removeMouseListener(lineHandler);
    brushPanel.removeMouseMotionListener(lineHandler);
    brushPanel.addMouseListener(handler);
    brushPanel.addMouseMotionListener(handler);             
   }
});
brushToggleBtn.setPreferredSize(new Dimension(50,26));
buttonsPanel.add(brushToggleBtn);
btnGroup.add(brushToggleBtn);
 
lineToggleBtn = new JToggleButton("Line");
lineToggleBtn.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
    brushPanel.removeMouseListener(handler);
    brushPanel.removeMouseMotionListener(handler); 
        brushPanel.addMouseListener(lineHandler);   
    brushPanel.addMouseMotionListener(lineHandler);         
               
   }
}); 
    lineToggleBtn.setPreferredSize(new Dimension(100,26));
    buttonsPanel.add(lineToggleBtn);
    btnGroup.add(lineToggleBtn);
//..........................................
//и далее...
//..........................................
 
public class PaintPanel extends JPanel {
@Override
public void setBackground(Color bg) {
super.setBackground(BACK_COLOR);
setPreferredSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT));         
handler = new MyMouseHandler();
lineHandler = new DrawLine();
}
 
public class MyMouseHandler extends MouseAdapter {...}
public class DrawLine extends MouseAdapter {...}
}

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


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

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

8   голосов , оценка 4.375 из 5
Похожие ответы