Java 控制台中的KeyEvents?
我试图建立一个基于文本的平台,但他们的键盘输入不工作。。。帮忙 这是理论上的代码,只要按箭头键,它就会移动小xJava 控制台中的KeyEvents?,java,keylistener,Java,Keylistener,我试图建立一个基于文本的平台,但他们的键盘输入不工作。。。帮忙 这是理论上的代码,只要按箭头键,它就会移动小x import java.awt.event.*; public class MAIN implements KeyListener{ private static int renderSizeX = 100; private static int renderSizeY = 25; public static String keyInput=""; p
import java.awt.event.*;
public class MAIN implements KeyListener{
private static int renderSizeX = 100;
private static int renderSizeY = 25;
public static String keyInput="";
public static void main(String[] args){
point player = new point(50,10,'X');
while(true==true){
m.sleep(160);
if(keyInput=="38")//up key
player.moveY(1);
if(keyInput=="40")//down key
player.moveY(-1);
if(keyInput=="37")//< key
player.moveX(-1);
if(keyInput=="30")//> key
player.moveX(1);
m2.render(new point[]{player});
}
}
public static int windowX(){ return renderSizeX;}
public static int windowY(){ return renderSizeY;}
//KEYBOARD INPUT!
public void keyTyped(KeyEvent e){
keyInput = e.getKeyCode()+"";
}
public void keyPressed(KeyEvent e){
}
public void keyReleased(KeyEvent e){
keyInput = "";
}
}
导入java.awt.event.*;
公共类MAIN实现KeyListener{
私有静态int renderSizeX=100;
私有静态int renderSizeY=25;
公共静态字符串keyInput=“”;
公共静态void main(字符串[]args){
点数玩家=新点数(50,10,'X');
while(true==true){
m、 睡眠(160);
如果(keyInput==“38”)//向上键
玩家:moveY(1);
如果(keyInput==“40”)//向下键
player.moveY(-1);
如果(keyInput==“37”)/ 键
player.moveX(1);
m2.渲染(新点[]{player});
}
}
公共静态int windowX(){return renderSizeX;}
公共静态int windowY(){return renderizey;}
//键盘输入!
public void keyTyped(KeyEvent e){
keyInput=e.getKeyCode()+“”;
}
按下公共无效键(按键事件e){
}
公共无效密钥已释放(密钥事件e){
keyInput=“”;
}
}
我不认为我的渲染类和点类有什么问题,但我也会展示它们
public class point{
int x, y;
char letter;
public point(int inX, int inY, char letterRepresent)
{
x = inX;
y = inY;
letter=letterRepresent;
}
public char getChar(){return letter;}
public int getX(){return x;}
public int getY(){return y;}
public void moveX(int ammount){x+=ammount;}
public void setX(int location){x=location;}
public void moveY(int ammount){y+=ammount;}
public void setY(int location){y=location;}
}
public class m{
//sleep method
public static void sleep(int milli){
try {
Thread.sleep(milli); //1000 milliseconds is one second.
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
public class m2
{
public static void render(point[] input){
System.out.print("\f");//Clears screen
for(int y = 0; y < MAIN.windowY(); y++){
for(int x = 0; x < MAIN.windowX(); x++){
char found = ' ';
for(int i = 0; i < input.length;i++){
if( input[i].getY() == y && input[i].getX() == x ){//checks to see if list of points contains a point at current x and y position
found = input[i].getChar();
}
}
System.out.print(found);//prints char if found else prints space
}
System.out.print("\n");
}
}
}
公共类点{
int x,y;
字符字母;
公共点(整数inX、整数inY、字符表示)
{
x=inX;
y=inY;
字母=字母代表;
}
public char getChar(){return letter;}
public int getX(){return x;}
public int getY(){return y;}
public void moveX(int amount){x+=amount;}
公共void setX(int位置){x=location;}
public void moveY(int amount){y+=amount;}
公共void setY(int位置){y=location;}
}
公共级m{
//睡眠法
公共静态无效睡眠(整数毫秒){
试一试{
Thread.sleep(毫秒);//1000毫秒是1秒。
}捕获(中断异常例外){
Thread.currentThread().interrupt();
}
公共级m2
{
公共静态无效渲染(点[]输入){
System.out.print(“\f”);//清除屏幕
对于(int y=0;y
找到了解决方案
我刚刚建立了一个小程序,呈现文本
这是你的电话号码
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
public class _Newmain extends Canvas {
private static int renderSizeX = 25;
private static int renderSizeY = 25;
private point player = new point(10,10,'X');
public _Newmain() {
setSize(new Dimension(500, 500));
addKeyListener(new KeyAdapter(){
@Override
public void keyPressed(KeyEvent evt) {
moveIt(evt);
}
});
}
public void paint(Graphics g) {
String text = m2.outputScreen(new point[]{player});
int x = 20; int y = 20;
for (String line : text.split("\n"))
g.drawString(line, x, y += g.getFontMetrics().getHeight());
//g.drawString(m2.outputScreen(new point[]{player}), 20, 20);
}
public void moveIt(KeyEvent evt) {
switch (evt.getKeyCode()) {
case KeyEvent.VK_DOWN:
player.moveY(1);
break;
case KeyEvent.VK_UP:
player.moveY(-1);
break;
case KeyEvent.VK_LEFT:
player.moveX(-1);
break;
case KeyEvent.VK_RIGHT:
player.moveX(1);
break;
}
repaint();
}
public static void main(String[] args) {
JFrame frame = new JFrame("TEXT BASED GAME WRITTEN BY SHANE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
_Newmain ex = new _Newmain();
frame.getContentPane().add(ex);
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
ex.requestFocus();
}
}
KeyListener用于侦听图形awt组件上发生的键盘事件。不在控制台中。必须将KeyListener添加到发出KeyEvents的内容中。否则,它将永远不会被调用。要从控制台读取,请使用
System.in
并学习Java IO。我应该使用scanner类吗?还是这对wha不起作用我正在尝试做什么?我不认为标准API中的任何内容都允许你做你想做的事情,如果你想保持基于控制台的状态。将你的控制台更改为或查看本机密钥侦听器(这可能会让你产生在控制台中键入的错觉,就像在没有GUI的密钥事件寄存器中一样,而实际上不需要在控制台中键入)我查看了原始模式…它似乎是相当不可移植的。有没有办法得到一个小程序,它只是隐藏自己,但仍然可以使用keyevents?