2012-10-01 58 views
2
class GameFrameClass extends javax.swing.JFrame { 

    public void MyFunc() 
    { 
     UserButton.setText(Str); 
     UserButton.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       UserButtonActionPerformed(evt); 
      } 
     }); 
     getContentPane().add(UserButton); 
    } 

    private void UserButtonActionPerformed(java.awt.event.ActionEvent evt) { 

     //print some stuff after mouse click 
    } 
} 

在一些其它類我定義這個功能如何等待鼠標點擊

void functionAdd() 
{ 
    GameFrameClass gfc = new GameFrameClass() 
    gfc.MyFunc() 
    System.out.println("PRINT THIS AFTER MOUSE CLICK") 
} 

如果有人可以看看這段代碼。我想等待點擊鼠標。是否有一種方法可以在單擊鼠標後打印System.out.println行(「打印此鼠標單擊後打印」)。目前這種情況立即發生,我無法等待鼠標點擊。有沒有辦法呢?除了在函數UserButtonActionPerformed()內部進行。請告訴我 。

回答

1

您可以隨時在UserButtonActionPerformed中定義它,並在同一個類中等待。如果是這種情況,那麼你不應該有你面臨的問題

1

事件在不同線程上管理,它們是event dispatching thread,它們不是由正在執行代碼的線程(可能是主線程)管理的。

這意味着您可以將偵聽器附加到GUI元素,但您可以做的只是等待點擊的唯一操作是執行actionPerformed回調中的代碼。

沒有辦法暫停執行,因爲addActionListener沒有做任何事情來有效地捕捉事件,它只是添加了偵聽器。理論上你可以鎖定等待被事件派發通知的主線程,但這只是不好的設計。

3

這是一個真正的「壞」的方式來做到這一點...

private void UserButtonActionPerformed(java.awt.event.ActionEvent evt) { 
    addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent evt) { 
      System.out.println("PRINT THIS AFTER MOUSE CLICK"); 
      removeMouseListener(this); 
     } 
    }); 
} 

一個更好的辦法是必須在actionPerformed方法,將「啓用」一個鼠標偵聽標誌(被添加的更早)。這個聽衆會在每次點擊時檢查標誌,當設置爲true時,它會翻轉標誌(到false)並處理事件...

2

很難從措辭中分辨出來,但我認爲他或她只是想在按鈕被觸發後執行代碼(而不是實際上等待)。爲此,您需要在actionlistener內調用的方法內添加代碼(在這種情況下爲UserButtonActionPerformed)。

所以:

private void UserButtonActionPerformed(java.awt.event.ActionEvent evt) { 

System.out.println(...); 

} 

此外,以下Java編碼慣例將幫助人們在未來的回答你的問題。