2013-04-24 41 views
0

这是我的主类设置JFrame的大小随的KeyEventDispatcher

package Apocalypse; 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Main extends JFrame{ 
    private int xSize, ySize; 

    public Main(){ 
     super("Zombie Apocalypse"); 
     Toolkit tk = Toolkit.getDefaultToolkit(); 
     xSize = (int) tk.getScreenSize().getWidth(); 
     ySize = (int) tk.getScreenSize().getHeight(); 
     setSize(xSize,ySize); 
     setUndecorated(true); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager(); 
     kfm.addKeyEventDispatcher(new MyDispatcher()); 
     add(new Level1()); 
     setVisible(true); 
    } 

    public static void main(String[] args){ 
     new Main(); 
    } 

    private class MyDispatcher implements KeyEventDispatcher{ 
     public boolean dispatchKeyEvent(KeyEvent e){ 
      if(e.getID() == KeyEvent.KEY_PRESSED){ 
       if(e.getKeyCode() == KeyEvent.VK_ESCAPE){ 
        System.out.println("It Worked"); 
        setUndecorated(false); 
       } 
      } 
      return false; 
     } 
    } 
} 

正如你在我的KeyEventDispatcher类我想setUndecorated假到您将能够关闭游戏中看到,但它不工作。我将如何做到这一点?

回答

2

一旦显示框架,您将无法更改其装饰,因为setUndecorated()在此情况下会抛出IllegalComponentStateException。要解决这个问题,您可以创建新的装饰框架,将您的内容移动到它并处理旧框架。