2012-10-05 114 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的侦听器之一中调用。