2012-04-19 2 views
4

CircleListener - это внутренний класс в классе панели, и теперь он включает интерфейс MouseListener. Метод MouseRelased проверяет, окружена ли зона щелчка окружностью, и если это так, что эта фигура будет выбрана и удалит выбранные.Java GUI - MouseListener и ActionListener можно в одном классе?

Теперь мне нужно, чтобы ActionListener добавлял круги с произвольным размером к этой панели с объектом «timer». Вопрос: Возможно ли реализовать «ActionListener» для CircleListener или лучше создать другой внутренний класс для «ActionListener»?

Заранее спасибо

private class CircleListener implements MouseListener 
{ 
    ShapesCanvas canvas; 
    ShapeContainer container; 
    Shape possibleShape; 

    private CircleListener(ShapesCanvas canv, ShapeContainer cont) 
    { 
     this.canvas = canv; 
     this.container = cont; 
    } 

    public void MouseRelased (MouseEvent e) 
    { 
     possibleShape = container.contains(e.getX(), e.getY()); 

     if(possibleShape != null) 
     { 
      ((Selectable)possibleShape).setSelected(true); 
      container.removeSelected(); 
     } 
     canvas.repaint(); //repaints the last situation 
    } 

ответ

10

Это определенно возможно, просто декларируют

private class CircleListener implements MouseListener, ActionListener 

Вы можете создать два класса, а не, и что на самом деле то, что я предпочитаю, потому что тогда у вас есть два различных объектов с четко определенными целями. Каждый объект отвечает только за одну функцию.

Но оба подхода действительны.

+0

Также является только хорошим объектом ориентации практики. :) –

1

Синтаксически вы можете определить класс, который реализует оба интерфейса. Определите два класса, если они имеют совершенно разные цели, поместите коды в один, если они разделяют некоторую информацию, такую ​​как радиус окружностей.

, что я не понимаю, в том, что ActionListener является то, что отвечает на событие GUI, а не Timer событие

Смежные вопросы