2014-12-03 99 views
0

我有這個方法,它包含一個MouseEvent。我如何返回idu變量? 它就像一個方法中的方法或如何調用它,我無法弄清楚頂部如何返回idu變量。返回值的問題java

public int getId() { 
    int idu; 
    table.addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent e) { 
      if (e.getClickCount() == 1) { 
      JTable target = (JTable)e.getSource(); 
      int row = target.getSelectedRow(); 
      Object record = data[row][0]; 
      idu = (Integer) record;     
     } 
    } 
    }); 
return idu; 
} 
+2

好像你可能對異步編程的工作原理有一個根本性的誤解。 – Mysticial 2014-12-03 23:34:06

回答

1

在幾乎所有情況下,「偵聽器」模式都涉及向偵聽器註冊沒有返回值的方法。通常來說,來自監聽器的返回值是沒有意義的,因爲它將被返回給調用者,而沒有關於如何處理它的上下文。

在我看來,你已經誤解了你發佈的代碼中的一些東西: 1.在'getter'方法中註冊監聽器是沒有意義的。監聽器需要註冊一次,一般在類的構造函數中 2.註冊監聽器本身並不做任何事情:它只是告訴處理程序在事件發生時調用您的方法(在這種情況下單擊鼠標)。 3.除非你在幾個地方重複使用監聽器(因爲它是一個匿名類,所以你不在這個代碼片段中),那麼你不需要獲取事件源 - 你應該已經將它作爲一個成員字段類。

所以你的情況的答案是你的JTable應該是你班級的成員字段。然後,getId方法只需要返回表的選定行。根本不需要註冊鼠標監聽器,因爲所選行在JTable中可用而無需任何額外的工作。

0

想想以下問題:

如果確實希望有idu值準備使用 - 當方法getId()運行完畢後,或者當用戶點擊在桌子上的鼠標按鈕?

你的代碼實際上做的是註冊一個事件監聽器,有點像設置一個鬧鐘或者稍後安排一個任務,然後去睡覺,或者回到你現在需要做的其他任務。

當您退出getId()方法時,idu的值不一定存在,因爲mouseClicked()方法中的代碼尚未執行。它只會在事件實際發生時才執行。