2013-07-07 37 views
0

好的,所以這個問題可能太基本了,但我一直在Google上搜索,一直沒有找到解決方案(甚至是解決方法)。如果你們中有些人不喜歡這個,我提前表示道歉。我正在用幾個按鈕創建一個GUI應用程序,所以當然我們需要一個鼠標事件(當點擊一個按鈕時)。因此,例如:如何將參數傳遞給Java中的鼠標事件(如果可能)?

public class myProject extends JFrame implements MouseListener { 
    public int x = 4; 
    public static void main(String[] args) { 
     Jframe app = new JFrame(); 
     app.setTitle // and all that jazz...   
     JLabel label = new JLabel(); 
     label.setText("Old text"); 
     app.add(label); 

     // Then later on... 
     public void mouseClicked(MouseEvent e) { 
      app.setTitle("New Title"); 
      label.setText("New text"); 
      System.out.println(x); 
      // "app" and "label" throw errors, cannot find symbol 
      // But x is fine...? 
     } 
    } 
} 

我試着讓app元素公共/私有實例變量,但似乎沒有任何改變。我甚至嘗試創建一種中介類來幫助,一個會將引用複製到交互器作爲實例變量,並使用這些引用的鼠標事件調用方法(第二次嘗試非常接近上面的代碼;但通過嘗試從主方法引用設置公共變量給了我更多的錯誤(關於我們如何不能從靜態方法調用非靜態對象)

因此,與這個野獸錯誤作鬥爭的底線是「野性鵝追」到目前爲止,我會很感激任何提示/技巧/解決方法你可能知道致謝:。)

+0

這對我來說有點不清楚,但爲什麼你要在一個靜態var中存儲一個變量?這是不安全的!只需將鼠標事件實例傳遞給目標方法,你能解釋更多嗎?!共享堆棧跟蹤? – 2013-07-07 08:57:11

+2

您的鼠標點擊方法在main方法內聲明,它不應該工作。 – Lokesh

+1

*「有幾個按鈕,所以當然我們需要一個鼠標事件」*當然你不知道。爲了響應鼠標輸入***和鍵盤,添加一個'ActionListener'到按鈕。*** –

回答

6

試着改變你的代碼是這樣的

Jframe app; 
JLabel label; 
    public static void main(String[] args) { 
      new myProject(); 
     } 

    public myProject() 
    { 
      app = new JFrame(); 
      app.setTitle // and all that jazz...   
      label = new JLabel(); 
      label.setText("Old text"); 
      app.add(label); 
    } 
     public void mouseClicked(MouseEvent e) { 
      app.setTitle("New Title"); 
      label.setText("New text"); 
      System.out.println(x); 
     } 
+0

@AndrewThompson謝謝你的建議。 –

+0

+1,很棒的編輯。 :) –

+0

這使得與我的程序的不同元素一起工作變得更加容易(因爲整個「靜態」東西似乎給程序增加了一層額外的複雜性;這是我需要進一步詳細研究的一個領域理解它爲什麼會這樣做)。就「方法內的方法」而言,這是我的一個錯字;這是我用記事本編寫的源代碼的總結;對於那個很抱歉。無論如何,通過主方法調用非靜態對象有所幫助。感謝Andrew爲整個ActionListener。我不知道有鼠標和鍵的單一監聽器。 – user2403876

0

您可以展示該課程的完整代碼。現在看起來像方法中的方法。如果它是內部類,如果它們不是最終的,則無法獲得應用程序,標籤和x值。

相關問題