Переключение значения аргумента addMouseListener и addMouseMotionListener по кнопке - Java
Формулировка задачи:
На форме есть 2 взаимовыключающих Если комментирую одно из условия, и с оставшегося убираю if, то работает. Подскажите как реализовать эту задумку?
Пример кода с
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); } }
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 {...} }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д