Java-获取触发mouseEvent的按钮的名称

Java-获取触发mouseEvent的按钮的名称,java,events,mouse,listeners,Java,Events,Mouse,Listeners,我有一个由几个类组成的Java程序 现在,我在名为Application的类中创建了Java程序的接口。我在这里定义了几个按钮 这就是我如何将鼠标侦听器添加到应用程序中的按钮的方法 我有另一个名为DrawingCanvas的类,其中包含许多鼠标事件处理程序。其中一个事件处理程序是鼠标按下的。下面是鼠标按下的代码: mousePressed的问题在于它无法识别按钮名称,如“button_Square”、“button_Rectangle”等。这是因为这些按钮是在应用程序类中声明的,而不是Drawi

我有一个由几个类组成的Java程序

现在,我在名为Application的类中创建了Java程序的接口。我在这里定义了几个按钮

这就是我如何将鼠标侦听器添加到应用程序中的按钮的方法

我有另一个名为DrawingCanvas的类,其中包含许多鼠标事件处理程序。其中一个事件处理程序是鼠标按下的。下面是鼠标按下的代码:

mousePressed的问题在于它无法识别按钮名称,如“button_Square”、“button_Rectangle”等。这是因为这些按钮是在应用程序类中声明的,而不是DrawingCanvas类中声明的


我怎样才能得到触发鼠标事件的按钮的名称?不要忘记声明按钮的类与实现mouselisteners和mousemotionlisteners的类不同。谢谢:)

只要你要创建8个不同的侦听器,就用JButton来区分它们

Button_Square.addMouseListener(new DrawingCanvas(Button_Square));
Button_Square.addMouseMotionListener(new DrawingCanvas(Button_Square));

Button_Rectangle.addMouseListener(new DrawingCanvas(Button_Rectangle));
Button_Rectangle.addMouseMotionListener(new DrawingCanvas(Button_Rectangle));

Button_Circle.addMouseListener(new DrawingCanvas(Button_Circle));
Button_Circle.addMouseMotionListener(new DrawingCanvas(Button_Circle));

Button_Triangle.addMouseListener(new DrawingCanvas(Button_Triangle));
Button_Triangle.addMouseMotionListener(new DrawingCanvas(Button_Triangle));

首先,您可以制作一个DrawingCanvas,并将其作为应用程序类中的字段;在这里,我将把它称为
canvas
。现在,如果您所有的按钮都有不同的功能,您可以为它们提供不同的鼠标侦听器:

Button_Rectangle.addMouseListener(new MouseListener()
{
    public void mousePressed(MouseEvent e)
    {
           if(!e.isControlDown())
           {
                 canvas.Shapes.add(new Rectangle(e.getX(), e.getY()));
           }
    }
    //handle other events, or don't directly implement MouseListener

});

Buuton_Circle.addMouseListener(new MouseListener()
{
    public void mousePressed(MouseEvent e)
    {
           if(!e.isControlDown())
           {
                 canvas.Shapes.add(new Circle(e.getX(), e.getY()));
           }
    }
    //handle other events, or don't directly implement MouseListener

});
等等


无需使用不同的对象来确定源。

您可以读取在按钮中设置的文本。如果该文本是唯一的,它将标识该按钮。以下是我用来识别和控制JToggleButtons的逻辑

请注意,一旦有了“抽象”按钮,就可以在不解析文本属性的情况下使用该按钮(例如,获取/设置背景色)执行所需操作

例如:

void PrintEventProperties(java.awt.event.MouseEvent evt) {
    AbstractButton EventSource = (AbstractButton)evt.getSource();
    System.out.println("Toggled on? " + EventSource.isSelected() );
    System.out.println("ID/text=" + EventSource.getText() );
    System.out.println("Color=" + EventSource.getBackground() );
}

你刚刚创建了8个DrawingCanvas吗?呃。。我知道我可能在添加鼠标侦听器和鼠标运动侦听器时出错。如何将mouselistener添加到组件中?所有这些侦听器都在DrawingCanvas类中。您可能应该为每个按钮编写一个dispatcher类,该类反过来调用DrawingCanvas类上的方法。我解决了这个问题。我创建了DrawingCanvas一次,每次调用mouselistener都会传递该实例。但是我如何区分按下的按钮呢?