2014-03-12 72 views
2

是否有可能创建了一个JButton既一个ActionListener和的MouseListener的JButton两者的ActionListener /的MouseListener

含义,所以我创建一个按钮然后当我按下它(throught的ActionListener)它改变帧以便AFTER然后按钮被按下,我可以按框架上的任何地方,MouseListener将被使用。

JButton button = new JButton();//Creates Button 
button.addActionListener(new ActionListener() {   
public void actionPerformed(ActionEvent e) { 
    //Insert MouseListener 
    //Then do something with mouseListener 
} 
}); 

继承人的CURENT代码:但是他们现在在同步的时候我尝试按一下按钮,我不能叫MouseListener的第2个时间

JButton button2 = new JButton("Click"); 
    button2.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      System.out.println("You clicked the button"); 
      newCube.stopCube(); 
     } 

    }); 
    button2.addMouseListener(new java.awt.event.MouseAdapter() 
    { 
     public void mousePressed(java.awt.event.MouseEvent evt) 
     { 
      double x = evt.getX(); 
      double y = evt.getY(); 
      newCube.setCube(x,y); 
     } 
    }); 
+0

是的,你可以,但是这是什么目的? – alex2410

+0

我该怎么做? 的目的是假设我有一个框架与2个按钮一个移动的东西和第二个停止它,然后使用鼠标监听器我可以手动移动它。 – user3249265

回答

0

这里是例如与JToggleButton其中添加/删除MouseListenerJFrame

import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 

import javax.swing.JFrame; 
import javax.swing.JToggleButton; 

public class Example extends JFrame { 

    private MouseAdapter mouseListener; 

    public Example(){ 
     init(); 
     pack(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    private void init() { 
     mouseListener = new MouseAdapter() { 
      @Override 
      public void mouseClicked(MouseEvent e) { 
       super.mouseClicked(e); 
       System.out.println("clicked"); 
      } 
     }; 
     setLayout(new FlowLayout()); 
     JToggleButton b = new JToggleButton("add listener"); 
     b.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       if(((JToggleButton)e.getSource()).isSelected()){ 
        Example.this.addMouseListener(mouseListener); 
        ((JToggleButton)e.getSource()).setText("remove listener"); 
       } else { 
        Example.this.removeMouseListener(mouseListener); 
        ((JToggleButton)e.getSource()).setText("add listener"); 
       } 
      } 
     }); 
     add(b); 
    } 

    public static void main(String... s){ 
     new Example(); 
    } 
} 

编辑:examle与JButton

public class Example extends JFrame { 

    private MouseAdapter mouseListener; 

    public Example(){ 
     init(); 
     pack(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    private void init() { 
     mouseListener = new MouseAdapter() { 
      @Override 
      public void mouseClicked(MouseEvent e) { 
       super.mouseClicked(e); 
       System.out.println("clicked"); 
      } 
     }; 
     setLayout(new FlowLayout()); 
     JButton b = new JButton("add listener"); 
     b.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       if(((JButton)e.getSource()).getText().equals("add listener")){ 
        Example.this.addMouseListener(mouseListener); 
        ((JButton)e.getSource()).setText("remove listener"); 
       } else { 
        Example.this.removeMouseListener(mouseListener); 
        ((JButton)e.getSource()).setText("add listener"); 
       } 
      } 
     }); 
     add(b); 
    } 

    public static void main(String... s){ 
     new Example(); 
    } 
} 
+0

对不起,我不熟悉JToggle,所以我有点困惑,有没有它更简单的方法吗? – user3249265

+0

是的,你可以使用'JButton',但'JToggleButton'指示你的'MouseListener'是否处于活动状态。 – alex2410

0

如果你想通过点击它移动的东西,你可以在该节点上直接使用鼠标监听器,而不是使用它的按钮。

要在按钮上添加动作侦听器和鼠标侦听器,您可以在按钮上使用addActionListener和addMouseListener方法。

看那API有关这些方法的信息... http://docs.oracle.com/javase/7/docs/api/javax/swing/JButton.html

+0

尝试添加两者,但mouseListener将始终与actionListener同步工作 – user3249265

+0

您可以使用布尔变量在鼠标侦听器之间切换。 – user2997477

0

如果我理解正确的话,这个样本可以帮助你(添加到您自己的ActionListener)

@Override 
public void actionPerformed(ActionEvent e) { 
    ((JButton)e.getSource()).addMouseListener(yourMouseListener); 
} 

我想这, 有用。

+0

什么是yourMouseListener?一个公共无效的方法? – user3249265

+0

它可以是实现MouseListener接口的任何东西(特别是新的MouseListener(){//带有重写方法的MouseListener主体} – rzysia

0

你想做什么仍然不清楚。虽然这可以帮助你。当单击开始按钮时,它将向组件添加鼠标列表程序,并在单击停止按钮时移除鼠标列表程序。因此,你可以阻止两个听众同步工作。

JButton startButton = new JButton(); 

startButton.addActionListener(new ActionListener() {   
public void actionPerformed(ActionEvent e) { 

    //Add MouseListener to move the component 

} 
}); 

JButton stopButton = new JButton(); 

stopButton.addActionListener(new ActionListener() {   
public void actionPerformed(ActionEvent e) { 

    //Remove the MouseListener 

} 
}); 
相关问题