4

CircleListener 是我面板类中的一个内部类,它现在涉及 MouseListener 接口。MouseRelased 方法检查单击的区域是否被圆圈包围,如果是,则将该形状设置为选中并删除选中的形状。

现在我需要一个 ActionListener 使用“计时器”对象向这个面板添加随机大小的圆圈。问题:是否可以为 CircleListener 实现“ActionListener”或者为“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
    }
4

2 回答 2

11

绝对有可能,只需声明

private class CircleListener implements MouseListener, ActionListener

您可以改为创建两个类,这实际上是我更喜欢的,因为这样您就有了两个具有明确定义目的的不同实体。每个实体只负责一个功能。

但是这两种方法都是有效的。

于 2012-04-19T11:49:07.363 回答
1

从语法上讲,您可以定义一个实现这两个接口的类。如果它们服务于完全不同的目的,则定义两个类,如果它们共享一些信息,例如圆的半径,则将代码放在一个类中。

我在这里不明白的是,ActionListener它响应的是 GUI 事件而不是Timer事件

于 2012-04-19T11:53:35.453 回答