如何使用 Intellij IDE 和 StdDraw 作为 GUI 来利用按键事件?

发布于 2025-01-12 17:12:45 字数 2789 浏览 2 评论 0原文

我需要用java制作太空侵略者。然而,我正在努力将关键事件落实到我的计划中。目前我有 2 个类,MainMenu.java 和 FrameListener.java。当我按下按键时就会注意到。我做错了什么?

MAINMENU.JAVA

import java.awt.*;
import java.io.File;
import java.io.IOException;


public class MainMenu {
    public static void main(String[] args) {

        //////////////////////////////////////////////////////https://stackoverflow.com/questions/5652344/how-can-i-use-a-custom-font-in-java
        Font fNewFont = null;
        try {
            fNewFont = Font.createFont(Font.TRUETYPE_FONT, new File("StarJedi-DGRW.ttf")).deriveFont(50f);
        } catch (FontFormatException | IOException e) {
            e.printStackTrace();
        }
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        //register the font
        ge.registerFont(fNewFont);
        ////////////////////////////////////////////////////////////////////////

        StdAudio.loop("Disconnected.wav");
        StdDraw.setCanvasSize(800, 800);
        StdDraw.setPenColor(StdDraw.BLACK);
        StdDraw.filledSquare(0, 0, 1);
        StdDraw.setPenColor(StdDraw.WHITE);
        StdDraw.setPenRadius(0.002);
        for (int i = 0; i < 1000; i++) {
            StdDraw.point(Math.random(), Math.random());
        }
        //  Font font = new Font("Arial", Font.BOLD, 60);
        StdDraw.setPenColor(StdDraw.RED);
        StdDraw.setFont(fNewFont);

        StdDraw.text(0.5, 0.8, "SPACE invaders");
        fNewFont = new Font("Arial", Font.PLAIN, 20);
        StdDraw.setFont(fNewFont);
        StdDraw.text(0.5, 0.7, "PRESS [SPACE] TO PLAY!");
        fNewFont = new Font("Arial", Font.PLAIN, 12);
        StdDraw.setFont(fNewFont);
        StdDraw.text(0.5, 0.6, "Shoot - [W]");
        StdDraw.text(0.5, 0.55, "Move - Left [A]; Right [D]");
        StdDraw.text(0.5, 0.5, "Rotate Turret- Left [Q]; Right [E]");
        StdDraw.text(0.5, 0.45, "Quit - [ESC]");
        //StdDraw.show();
        new FrameListener();


    }
}

FRAMELISTENER.JAVA

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

public class FrameListener extends JFrame implements KeyListener {


    JLabel label;
    ImageIcon icon;

    FrameListener() {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(0, 0);
        this.addKeyListener(this);
        this.setVisible(false);
    }

    public void keyTyped(KeyEvent e) {
        System.out.println("Key Pressed-" + e.getKeyCode());
    }

    public void keyPressed(KeyEvent e) {
        System.out.println("Key Pressed-" + e.getKeyCode());
    }

    public void keyReleased(KeyEvent e) {
        System.out.println("Key Pressed-" + e.getKeyCode());
    }
}

I need to make space invaders in java. I am however struggling to implement key events into my program. Currently I have 2 classes, MainMenu.java and FrameListener.java. Noting happens when I press keys. What am I doing wrong?

MAINMENU.JAVA

import java.awt.*;
import java.io.File;
import java.io.IOException;


public class MainMenu {
    public static void main(String[] args) {

        //////////////////////////////////////////////////////https://stackoverflow.com/questions/5652344/how-can-i-use-a-custom-font-in-java
        Font fNewFont = null;
        try {
            fNewFont = Font.createFont(Font.TRUETYPE_FONT, new File("StarJedi-DGRW.ttf")).deriveFont(50f);
        } catch (FontFormatException | IOException e) {
            e.printStackTrace();
        }
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        //register the font
        ge.registerFont(fNewFont);
        ////////////////////////////////////////////////////////////////////////

        StdAudio.loop("Disconnected.wav");
        StdDraw.setCanvasSize(800, 800);
        StdDraw.setPenColor(StdDraw.BLACK);
        StdDraw.filledSquare(0, 0, 1);
        StdDraw.setPenColor(StdDraw.WHITE);
        StdDraw.setPenRadius(0.002);
        for (int i = 0; i < 1000; i++) {
            StdDraw.point(Math.random(), Math.random());
        }
        //  Font font = new Font("Arial", Font.BOLD, 60);
        StdDraw.setPenColor(StdDraw.RED);
        StdDraw.setFont(fNewFont);

        StdDraw.text(0.5, 0.8, "SPACE invaders");
        fNewFont = new Font("Arial", Font.PLAIN, 20);
        StdDraw.setFont(fNewFont);
        StdDraw.text(0.5, 0.7, "PRESS [SPACE] TO PLAY!");
        fNewFont = new Font("Arial", Font.PLAIN, 12);
        StdDraw.setFont(fNewFont);
        StdDraw.text(0.5, 0.6, "Shoot - [W]");
        StdDraw.text(0.5, 0.55, "Move - Left [A]; Right [D]");
        StdDraw.text(0.5, 0.5, "Rotate Turret- Left [Q]; Right [E]");
        StdDraw.text(0.5, 0.45, "Quit - [ESC]");
        //StdDraw.show();
        new FrameListener();


    }
}

FRAMELISTENER.JAVA

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

public class FrameListener extends JFrame implements KeyListener {


    JLabel label;
    ImageIcon icon;

    FrameListener() {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(0, 0);
        this.addKeyListener(this);
        this.setVisible(false);
    }

    public void keyTyped(KeyEvent e) {
        System.out.println("Key Pressed-" + e.getKeyCode());
    }

    public void keyPressed(KeyEvent e) {
        System.out.println("Key Pressed-" + e.getKeyCode());
    }

    public void keyReleased(KeyEvent e) {
        System.out.println("Key Pressed-" + e.getKeyCode());
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

友谊不毕业 2025-01-19 17:12:45
StdDraw.onKeyPress(--keyCode--);
StdDraw.onKeyPress(--keyCode--);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文