【问题标题】:Java - Get name of button which triggerred mouseEventJava - 获取触发鼠标事件的按钮名称
【发布时间】:2012-11-15 15:38:27
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 你刚刚创建了 8 个 DrawingCanvas 的吗?
  • Erm.. 我知道我在添加鼠标侦听器和鼠标运动侦听器时可能有一些错误。如何将鼠标侦听器添加到组件中?所有这些侦听器都在 DrawingCanvas 类中。
  • 您可能应该为每个按钮编写一个调度程序类,该类依次调用 DrawingCanvas 类上的方法。
  • 我解决了这个问题。我创建了一次 DrawingCanvas,并在每次调用 mouselistener 时传递该实例。
  • 请问如何区分按下的按钮?

标签: java events mouse listeners


【解决方案1】:

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

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

});

等等……

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

【讨论】:

    【解决方案2】:

    只要您要创建 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));
    

    【讨论】:

      【解决方案3】:

      您可以阅读在按钮中设置的文本。如果该文本是唯一的,它将识别按钮。以下是我用来识别和控制 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() );
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-22
        • 1970-01-01
        • 1970-01-01
        • 2012-08-06
        • 2010-12-31
        • 1970-01-01
        • 2018-09-21
        • 1970-01-01
        相关资源
        最近更新 更多