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