Java 按键时如何执行一段代码?

Java 按键时如何执行一段代码?,java,class,input,keyboard,invoke,Java,Class,Input,Keyboard,Invoke,所以基本上我想找到一种方法来执行一段代码,当我按下一个键,而不是必须扫描一个字符串,然后按enter键来调用它。这是我第一次在这里问一个问题,而且在代码方面我也不是很在行。只是尝试学习新的东西,这将提高我的编码知识。这是我目前的代码: 主要方法(我试图更改变量“key”中扫描的部分): import java.util.Scanner; 公共类测试游戏{ 公共静态void main(字符串[]args){ //TODO自动生成的方法存根 地下城编号one=新地下城(); 字符串键; number

所以基本上我想找到一种方法来执行一段代码,当我按下一个键,而不是必须扫描一个字符串,然后按enter键来调用它。这是我第一次在这里问一个问题,而且在代码方面我也不是很在行。只是尝试学习新的东西,这将提高我的编码知识。这是我目前的代码:

主要方法(我试图更改变量“key”中扫描的部分):

import java.util.Scanner;
公共类测试游戏{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
地下城编号one=新地下城();
字符串键;
numberOne.setPlayer();
numberOne.printLayout();
扫描仪输入=新扫描仪(System.in);
对于(int x=0;x
助手类:

public class dungeon {
    private monster[] randMonster = new monster [10];
    private String printDungeon ="";
    private int x = 17;
    private int y = 34;
    private String pastLayout = "H";
    private String currentPostion = "O";
    private String[][] layout = //I deleted this as it was long. It was an 
 ASCII art layout..


public void printLayout()
    {
        for(int x = 0; x < layout.length; x ++)
        {
            for(int y = 0; y < layout[0].length; y++)
            {
                printDungeon = printDungeon + layout[x][y];
            }
            System.out.println(printDungeon);
            printDungeon = "";
        }
    }
    public void setPlayer()
    {
        layout[x][y] = "O";
    }
    public void moveUp()
    {
        if(layout[x-1][y].equals("#"))
        {}
        else
        {
        layout[x][y]=pastLayout;
        pastLayout = layout[x-1][y];
        layout[x-1][y] = currentPostion;
        x--;
        }
    }
    public void moveDown()
    {
        if(layout[x+1][y].equals("#"))
        {}
        else
        {
        layout[x][y]=pastLayout;
        pastLayout = layout[x+1][y];
        layout[x+1][y] = currentPostion;
        x++;
        }
    }
    public void moveLeft()
    {
        if(layout[x][y-1].equals("#"))
        {}
        else
        {
        layout[x][y]=pastLayout;
        pastLayout = layout[x][y-1];
        layout[x][y-1] = currentPostion;
        y--;
        }
    }
    public void moveRight()
    {
        if(layout[x][y+1].equals("#"))
        {}
        else
        {
        layout[x][y]=pastLayout;
        pastLayout = layout[x][y+1];
        layout[x][y+1] = currentPostion;
        y++;
        }
    }
}
公共级地下城{
私人怪物[]随机怪物=新怪物[10];
私有字符串printDungeon=“”;
私人整数x=17;
私人智力y=34;
私有字符串passlayout=“H”;
私有字符串currentposition=“O”;
私有字符串[][]布局=//我删除了这个,因为它很长。它是一个
ASCII艺术布局。。
公共空间版式()
{
对于(int x=0;x
编辑:假设您正在使用javafx制作GUI。我不确定它是否能在命令行中工作,但可能不能:/

编辑2:一件小事,但是如果您在每次案例之后更新布局,您可以只更新if/else范围之外的布局。最好的做法是排除代码并避免复制粘贴编码

有一种非常简单的方法可以使用EventHandler和KeyEvents实现这一点

这是一个使用switch语句的实现。如果更适合您,您可以使用if/else块替换开关,但是如果您不知道开关语句,并且确实想提高您的编码知识,请务必查看它们

import javafx.event.EventHandler;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
public class SomeClass {
    public SomeClass() {
        //constructor elided
    }
    //Within your class containing your methods, have this private class.
    private class KeyHandler implements EventHandler<KeyEvent> {
        @Override
        public void handle(KeyEvent e) {
            KeyCode keyPressed = e.getCode();

            switch (keyPressed) {

            case W:
                //do W thing
                break;
            case A:
                //do A thing
                break;
            case S:
                //do S thing
                break;
            case D:
                //do D thing
                break;
            default:
                break;
            }
        }
    }
}
导入javafx.event.EventHandler;
导入javafx.scene.input.KeyCode;
导入javafx.scene.input.KeyEvent;
公共类{
公共类(){
//省略构造函数
}
//在包含方法的类中,拥有这个私有类。
私有类KeyHandler实现EventHandler{
@凌驾
公共无效句柄(KeyEvent e){
KeyCode keyPressed=e.getCode();
开关(按键){
案例W:
//做事
打破
案例A:
//做一件事
打破
案例S:
//做自己的事
打破
案例D:
//做事
打破
违约:
打破
}
}
}
}
祝你好运!享受编码的乐趣!
p、 您可以删除“//TODO自动生成的方法存根”注释–该注释作为编辑软件的注释,该方法需要填写

可能重复(第二个答案是这个问题的重要答案)。在顶部添加导入语句时,它会给我一个错误,如“类型'KeyEvent'不是API”。这与我运行此代码所用的程序有关吗?还有可能的解决办法吗?谢谢老实说,我不确定。检查对我的回复的编辑。这个项目是如何实施的?它只是打印到命令行吗?我只编写了一年的代码,但第一学期的重点是基于GUI的java项目。对不起,我帮不了你了!不管是哪种方式,仍然要查看switch语句来处理键事件。在短期内,这并不重要,但它会清理代码,并有助于运行时。在一个输入更多的大型项目中,它们在运行时有一定的改进。如果您使用的是命令行,请查看以下文章:
import javafx.event.EventHandler;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
public class SomeClass {
    public SomeClass() {
        //constructor elided
    }
    //Within your class containing your methods, have this private class.
    private class KeyHandler implements EventHandler<KeyEvent> {
        @Override
        public void handle(KeyEvent e) {
            KeyCode keyPressed = e.getCode();

            switch (keyPressed) {

            case W:
                //do W thing
                break;
            case A:
                //do A thing
                break;
            case S:
                //do S thing
                break;
            case D:
                //do D thing
                break;
            default:
                break;
            }
        }
    }
}