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

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

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

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

togglebtn

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

PaintPanel

наследник от

JPanel

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

MyMouseHandler

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

DrawLine

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

MouseAdapter

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

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

Листинг программы
  1. public class PaintPanel extends JPanel {
  2. @Override
  3. public void setBackground(Color bg) {
  4. super.setBackground(BACK_COLOR);
  5. setPreferredSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT));
  6. handler = new MyMouseHandler();
  7. lineHandler = new DrawLine();
  8. if (penToggleBtn.isSelected()) {
  9. this.addMouseListener(handler);
  10. this.addMouseMotionListener(handler);
  11. }
  12. if (lineToggleBtn.isSelected()) {
  13. this.addMouseListener(lineHandler);
  14. this.addMouseMotionListener(lineHandler);
  15. }
  16. }
Если комментирую одно из условия, и с оставшегося убираю if, то работает. Подскажите как реализовать эту задумку? Пример кода с

addItemListener

Листинг программы
  1. penToggleBtn = new JToggleButton("P");
  2. penToggleBtn.addItemListener(new ItemListener() {
  3. public void itemStateChanged(ItemEvent e) {
  4. brushPanel.addMouseListener(handler);
  5. brushPanel.addMouseMotionListener(handler);
  6. }
  7. });
  8. lineToggleBtn = new JToggleButton("Line");
  9. lineToggleBtn.addItemListener(new ItemListener() {
  10. public void itemStateChanged(ItemEvent e) {
  11. brushPanel.addMouseListener(lineHandler);
  12. }
  13. });

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

textual
Листинг программы
  1. penToggleBtn = new JToggleButton("Pen");
  2. penToggleBtn.addChangeListener(new ChangeListener() {
  3. public void stateChanged(ChangeEvent e) {          
  4.     brushPanel.removeMouseListener(lineHandler);
  5.     brushPanel.removeMouseMotionListener(lineHandler);
  6.     brushPanel.addMouseListener(handler);
  7.     brushPanel.addMouseMotionListener(handler);
  8.    }
  9. });
  10. penToggleBtn.setPreferredSize(new Dimension(50,26));
  11. buttonsPanel.add(penToggleBtn);
  12. btnGroup.add(penToggleBtn);
  13.  
  14. brushToggleBtn = new JToggleButton("Brush");
  15. brushToggleBtn.addChangeListener(new ChangeListener() {
  16. public void stateChanged(ChangeEvent e) {
  17.     brushPanel.removeMouseListener(lineHandler);
  18.     brushPanel.removeMouseMotionListener(lineHandler);
  19.     brushPanel.addMouseListener(handler);
  20.     brushPanel.addMouseMotionListener(handler);            
  21.    }
  22. });
  23. brushToggleBtn.setPreferredSize(new Dimension(50,26));
  24. buttonsPanel.add(brushToggleBtn);
  25. btnGroup.add(brushToggleBtn);
  26.  
  27. lineToggleBtn = new JToggleButton("Line");
  28. lineToggleBtn.addChangeListener(new ChangeListener() {
  29. public void stateChanged(ChangeEvent e) {
  30.     brushPanel.removeMouseListener(handler);
  31.     brushPanel.removeMouseMotionListener(handler);
  32.         brushPanel.addMouseListener(lineHandler);  
  33.     brushPanel.addMouseMotionListener(lineHandler);        
  34.                
  35.    }
  36. });
  37.     lineToggleBtn.setPreferredSize(new Dimension(100,26));
  38.     buttonsPanel.add(lineToggleBtn);
  39.     btnGroup.add(lineToggleBtn);
  40. //..........................................
  41. //и далее...
  42. //..........................................
  43.  
  44. public class PaintPanel extends JPanel {
  45. @Override
  46. public void setBackground(Color bg) {
  47. super.setBackground(BACK_COLOR);
  48. setPreferredSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT));        
  49. handler = new MyMouseHandler();
  50. lineHandler = new DrawLine();
  51. }
  52.  
  53. public class MyMouseHandler extends MouseAdapter {...}
  54. public class DrawLine extends MouseAdapter {...}
  55. }

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


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

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

8   голосов , оценка 4.375 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы