Переключение значения аргумента 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 {...}
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д