2009-08-30 56 views
2

我有一個jbutton,它在用鼠標點擊時執行一個功能。這樣做的編程我有這等功能jbutton.doClick()單擊按鈕但不執行功能

void clickButton(){ 
     backButton.doClick(); 
} 

當我運行clickButton()函數,我可以看到被壓在JFrame中的後退按鈕而是返回按鈕相關的功能不會發生。當我用鼠標點擊它的功能。我在這裏做錯了什麼?

+0

爲什麼您在沒有演示代碼的情況下重新發布此問題以顯示問題?我在最後一篇文章中告訴過你,使用doClick()方法沒有什麼特別之處,所以你必須在代碼中遇到問題。發佈一行代碼對於我們解決您的問題毫無用處。發佈SSCCE。如果您不知道SSCCE是什麼,請使用Google搜索網頁。 – camickr 2009-08-31 00:34:46

+0

你應該發佈更多關於你的問題的信息。將代碼分配給該按鈕的代碼(您說這些代碼有時不起作用)。 – twolfe18 2009-08-31 00:35:55

+0

我相信addActionListener不太好用,但addItemListener的確出於某種原因。 – rogerdpack 2012-10-13 05:15:41

回答

0

你如何將邏輯附加到按鈕?如果您正在使用ActionListener(或Action),它應該會觸發。如果你正在使用別的東西(或許是MouseListener?),我不認爲它會。

4

如果您有一個ActionListener附加到您的button,它會在您調用方法.doClick()時觸發;

進行了抽樣檢測,以證明這一點:

public class Test implements ActionListener { 
    public Test() { 
    } 

    public void actionPerformed(ActionEvent e) { 
     System.out.println("The action have been performed"); 
    } 

    public static void main(String[] agrs) { 
     JButton but = new JButton(); 
     but.addActionListener(new Test()); 
     but.doClick(); 
    } 
} 
1

可以遍歷該按鈕的聽衆和手動調用它們。

KeyEventDispatcher keyEventDispatcher = new KeyEventDispatcher() { 
      @Override 
      public boolean dispatchKeyEvent(final KeyEvent e) { 
      if (e.getID() == KeyEvent.KEY_TYPED) { 
       System.out.println(e); 
       if (e.getKeyChar() == ' '){ 
        MouseEvent me = new MouseEvent(btnStop,MouseEvent.MOUSE_CLICKED,EventQueue.getMostRecentEventTime(),0,0,1,1,false); 
        for (MouseListener ml : btnStop.getMouseListeners()) ml.mouseClicked(me); 
       } 
      } 
      // Pass the KeyEvent to the next KeyEventDispatcher in the chain 
      return false; 
      } 
     }; 
    KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(keyEventDispatcher); 
}