2012-10-05 155 views
4

我爲虛擬鍵盤實現了一個樣例類並運行此VirtualKeyboardTest。鍵盤出現,但主要問題是單擊x按鈕時它不能正確關閉。如何才能糾正這個?單擊關閉按鈕時awt窗口不會關閉

import java.awt.*; 
import java.awt.event.*; 

public class VirtualKeyboardTest 
{ 
    public static void main(String args[]) 
    { 
     VirtualKeyboard vk = new VirtualKeyboard(); 
     vk.setSize(500,300); 
     vk.setVisible(true); 
     Frame f1 = new Frame(); 
     f1.addWindowListener(new WindowAdapter() { 
      @Override 
      public void windowClosing(WindowEvent we) { 

       System.exit(0); 
      } 
     }); 
    } 
} 
+0

AWT是重量級即其組分使用系統的資源,Sw​​ing提供與平臺無關的,並使用AWT組件輕質組分例如JButton,JTextField中,JTextArea中,一個JRadioButton,JCheckBox的,JMenu的,等等JColorChooser的哥們 –

回答

0

檢查:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

時, 「X」 被按下它主要是告訴窗口管理器來關閉您的應用程序。

+2

不賭徒Swing組件。此方法不可用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 爲框架這是爲JFrame – Pratik

+0

沒有我需要這個沒有擺動......... – Gambler

+1

認真嗎? -1。這個答案只是表明你沒有閱讀這個問題。它使用AWT,而不是Swing。我希望更多一點。 – Zizouz212

5

您的代碼不正確。取而代之的

f1.addWindowListener(new WindowAdapter() { 
    ... 

嘗試

vk.addWindowListener(new WindowAdapter() { 
    ... 

這將關閉你的窗口。

+0

+1對和正確的建議,很好趕上 – mKorbel

+0

@彼得..........謝謝老兄 – Gambler

2

這是更好地使用該方法公共無效的Dispose()

vk.addWindowListener(new WindowAdapter() { 
     public void windowClosing(WindowEvent we) { 
      vk.dispose(); // use dispose method 
     } 
    } 
); 

AWT是重量級的,即它的組件使用系統的資源。

Windows是非阻塞的。這意味着一旦你在代碼中創建一個代碼,你的代碼就會繼續執行。

這意味着您的窗口可能在創建之後立即超出範圍,除非您明確地在其他地方存儲了引用。此時窗口仍在屏幕上。

這也意味着當你完成它時你需要一些其他方式來擺脫它。輸入Window dispose()方法,它可以從Window的偵聽器之一中調用。