我有一个由几个类组成的Java程序。
现在,我在名为 Application 的类中创建了Java程序的接口。我在那里定了几个按钮。
这就是我将鼠标监听器添加到应用程序类中的按钮的方法:
我有另一个名为 DrawingCanvas 的类,其中包含许多鼠标事件处理程序。其中一个事件处理程序是mousePressed。这是mousePressed的代码:
用的的mousePressed问题是,它不能识别该按钮的名称,如“Button_Square”,“Button_Rectangle”等,这是因为这些按钮已在应用被声明类,而不是< strong> DrawingCanvas 类。
如何获取触发鼠标事件的按钮名称?不要忘记声明按钮的类与实现mouselisteners和mousemotionlisteners的类不同。谢谢:))
答案 0 :(得分: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
});
等......
无需使用不同的对象来确定来源。
答案 1 :(得分: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));
答案 2 :(得分:0)
您可以阅读在按钮中设置的文本。如果该文本是唯一的,它将识别该按钮。以下是我用来识别和控制JToggleButtons的逻辑。
请注意,一旦有了“摘要”按钮,您就可以使用该按钮执行所需的操作(例如获取/设置背景色),而无需解析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() );
}