有点像菜鸟问题,但话又说回来,我是个菜鸟。我正在尝试实现一种“通用”鼠标监听器。也就是说,当我单击屏幕上的任何对象时,它会运行特定数量的代码。我有下面的当前解决方案,但我想要运行的代码对于10个不同的对象是相同的,所以这变得相当繁琐。
difference2 = new JLabel(new ImageIcon("transparent.png"));
difference2.setBounds(645,490,10,10); //left, top, width, height
contentPane.add(difference2);
difference2.setVisible(true);
difference2.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e) {
//code
}
});
我知道我可以创建一个单独的方法,如下面的
public void mouseClicked(MouseEvent e) {
JOptionPane.showMessageDialog(null,"this would be nice");
}
但我无法弄清楚如何在每个对象上设置鼠标监听器。 JOptionPane目前什么也没做。
答案 0 :(得分:2)
您可以创建一个扩展MouseAdapter
的匿名类的实例,并将其分配给您可以重用的变量(在这种情况下为myMouseListener
):
MouseListener myMouseListener = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
JOptionPane.showMessageDialog(null,"this would be nice");
}
};
difference2.addMouseListener(myMouseListener);
aSecondObject.addMouseListener(myMouseListener);
aThirdObject.addMouseListener(myMouseListener);
...
答案 1 :(得分:2)
我可能误读了你的问题,但如果你想在各种对象上使用相同的mouselistener,你可以将监听器的实例存储在变量中一次,然后将其添加到你想要添加到的任何gui对象中。
MouseListener ml = new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {//code}
@Override
public void mousePressed(MouseEvent e) {//code}
@Override
public void mouseExited(MouseEvent e) {//code}
@Override
public void mouseEntered(MouseEvent e) {//code}
@Override
public void mouseClicked(MouseEvent e) {//code}
};
JLabel j1 = new JLabel("Label1");
j1.addMouseListener(ml);
JLabel j2 = new JLabel("Label2");
j2.addMouseListener(ml);