Java JFrame-从keylistener类访问我的窗口

Java JFrame-从keylistener类访问我的窗口,java,jframe,Java,Jframe,我在一个名为Core的类中创建JFrame窗口,然后主要创建如下窗口: Core window = new Core("GAME1", 0, 0, true, true); 但后来我决定使用keylistener,并创建了另一个名为Core_ControlsL的类: 我的问题是在这里: else if(keyCode == 113) { GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScr

我在一个名为Core的类中创建JFrame窗口,然后主要创建如下窗口:

Core window = new Core("GAME1", 0, 0, true, true);
但后来我决定使用keylistener,并创建了另一个名为Core_ControlsL的类: 我的问题是在这里:

 else if(keyCode == 113)
      {
         GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(this.window);
      }
我不知道如何进入窗口,所以当我按下F2键时,它会再次进入全屏

import javax.swing.UnsupportedLookAndFeelException;
这是我的main.java:

public class Main
{
   public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException
   {
         Core window = new Core("GAME1", 0, 0, true, true);
   }
}
这是Core.java:

import java.awt.GraphicsEnvironment;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.WindowConstants;

public class Core extends JFrame implements ActionListener
{
   private final String Game_Title;
   private int Window_Width;
   private int Window_Height;
   private boolean isVisible;
   private boolean isResizeable;

   public Core(String Game_Title, int Window_Width, int Window_Height, boolean isVisible, boolean isResizeable) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException
   {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

      this.Game_Title = Game_Title;
      this.Window_Width = Window_Height;
      this.Window_Height = Window_Height;
      this.isResizeable = isResizeable;
      this.isVisible = isVisible;

      //Create JFrame
      JFrame window = new JFrame(Game_Title);
      window.setSize(Window_Width, Window_Height);
      window.setResizable(isResizeable);
      window.setExtendedState(JFrame.MAXIMIZED_BOTH);
      window.setVisible(isVisible);
      window.addKeyListener(new Core_Controls());
      window.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
      GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(window); // make window full screen

   }

   @Override
   public void actionPerformed(ActionEvent e)
   {

   }
}
以及Core_Controls.java:

import java.awt.GraphicsEnvironment;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Core_Controls implements KeyListener
{
   @Override
   public void keyTyped(KeyEvent e)
   {
   }

   @Override
   public void keyPressed(KeyEvent e)
   {
      int keyCode;
      keyCode = e.getKeyCode();
      System.out.println(keyCode); // LLLLLL
      if(keyCode == 112)
      {
         GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(null);
      }
      else if(keyCode == 113)
      {
        GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(null);
      }
   }

   @Override
   public void keyReleased(KeyEvent e)
   {
   }
}

将窗口传递给侦听器:

Core window = new Core("GAME1", 0, 0, true, true);
Core_ControlsL listener = new Core_ControlsL(window);
在进行此操作时,请重命名您的类,使其符合标准Java命名约定。使用完整的单词,而不是不可读的缩写。两周后,当你重新阅读自己的代码时,你会感谢自己

  • 不要使用“神奇数字”。“112”和“113”对其他阅读代码的人来说没有任何意义
  • 更好的是,不要使用KeyListener

  • Swing设计用于
    键绑定
    。查看键绑定以了解一些基本信息,以及有关如何使用键绑定的Swing教程的链接,以及键绑定工作示例的链接。

    我编辑了我的代码,以便您可以确切地看到发生了什么。我今年在uni开始学习Java,我对它还是新手,任何代码优化都是非常受欢迎的。我并不是在尝试构建整个游戏,而是在练习。我仍然在尝试解决这个问题。。。。