1

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

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

这就是我将鼠标侦听器添加到Application类中的按钮的方式:

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

mousePressed 的问题是它无法识别按钮名称,例如“Button_Square”、“Button_Rectangle”等。这是因为这些按钮已在Application类中声明,而不是在DrawingCanvas类中声明。

请问如何获取触发鼠标事件的按钮的名称?不要忘记声明按钮的类与实现mouselisteners 和mousemotionlisteners 的类不同。谢谢 :)

4

3 回答 3

2

首先,您可以制作一个 DrawingCanvas 并将其作为应用程序类中的一个字段;在这里我要调用它canvas。现在,如果你所有的按钮做不同的事情,你可以给他们所有不同的 MouseListener:

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

});

很快...

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

于 2012-11-15T16:33:58.343 回答
1

只要您要创建 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));
于 2012-11-15T16:06:10.487 回答
0

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

请注意,一旦您拥有 Abstract 按钮,您就可以使用该按钮执行您想要的操作(例如获取/设置背景颜色),而无需解析 text 属性。

例子:

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() );
}
于 2018-12-19T22:09:39.467 回答