2014-03-12 91 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 

} 
}); 
相關問題