Переключение значения аргумента 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 {...}
}