2014-06-04 74 views
0

我想創建一個WindowAdapter的實例,並將其中的windowClosing的方法放入其中,然後將temp發送到f.addWindowListener(temp)這可以完成。如何創建或分配一個方法到臨時(WindowAdapter)?

Java不會讓我創建如下所示的WindowAdapter的實例。

WindowAdapter temp = new WindowAdapter(); <-- Does not compile 

這怎麼辦?

代碼:

public static void main(String args[]) { 
    setLookFeel(); 

    JFrame f = new JFrame("Hello World Printer..."); 

    WindowAdapter temp; 


    f.addWindowListener(new WindowAdapter() { 

     public void windowClosing(WindowEvent e) { 
      System.exit(0); 
     } 
    }); 

    JButton printButton = new JButton("Print Hello World"); 
    printButton.addActionListener(new HelloWorldPrinter()); 
    f.add("Center", printButton); 
    f.pack(); 
    f.setVisible(true); 
} 

這工作,但我怎麼能使用test()方法。

HelloWorldPrinter t = new HelloWorldPrinter() { 
     public void test() { 
      System.out.println("Test"); 
     } 
    }; 

    t.test(); <-- gives a compile error 

回答

1

也許是這樣的?

WindowAdapter temp = new WindowAdapter() { 
    @Override 
    public void windowClosing(WindowEvent e) { 
     System.exit(0); 
    } 
}; 

f.addWindowListener(temp); 

編輯:

有關測試方法。你不能用匿名課程(acctualy可以,但只有反思,這不是很好)。因爲這不是什麼匿名類。

匿名類對於舒適地實現接口,擴展抽象類甚至非抽象類非常方便。例如,如果你的HelloWorldPrinter類/接口有一個test()方法,那麼你的代碼會很好地編譯,並且t.test()會在你的匿名類中調用你的方法。

+0

這有效,但爲什麼這個工作看起來很奇怪,你可以用{和a}構造函數;這可以在任何類的任何構造函數上完成嗎? –

+0

我建議你閱讀一些關於匿名類的內容:http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html – kajacx

+0

我真的不想使用匿名類。我真正想要弄清楚的是,什麼時候更好地製作一個接口的實例,而不是實現它。我知道有時候會出現這種情況,因此如何將界面的實例變成變量而不是變量,會有什麼好處。 –