Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何调用KeyListener并使用KeyEvent?_Java_Swing_Keyboard_Keylistener_Keyevent - Fatal编程技术网

Java 如何调用KeyListener并使用KeyEvent?

Java 如何调用KeyListener并使用KeyEvent?,java,swing,keyboard,keylistener,keyevent,Java,Swing,Keyboard,Keylistener,Keyevent,我正试图设计一个在屏幕上移动的简单盒子。我打算画它,然后每当我按下一个箭头键,它就会改变它的位置,然后重新画它。它将继续这样做,直到到达外部边界,然后代码将停止。但我不知道如何创建一个KeyListener来检查键入的键。也许有一个更好的方法来做这件事,比我正在试图做的,任何帮助将不胜感激 好的,谢谢你,这些想法确实对我有帮助,但我对同样的代码也有问题。。。如果按了箭头键,我不知道如何调用makeyevent来调用方法check。比如写代码来移动角色不会太难,但是我该如何调用这个方法呢?我需要一

我正试图设计一个在屏幕上移动的简单盒子。我打算画它,然后每当我按下一个箭头键,它就会改变它的位置,然后重新画它。它将继续这样做,直到到达外部边界,然后代码将停止。但我不知道如何创建一个KeyListener来检查键入的键。也许有一个更好的方法来做这件事,比我正在试图做的,任何帮助将不胜感激

好的,谢谢你,这些想法确实对我有帮助,但我对同样的代码也有问题。。。如果按了箭头键,我不知道如何调用makeyevent来调用方法check。比如写代码来移动角色不会太难,但是我该如何调用这个方法呢?我需要一个keyEvent作为参数,但我不知道如何调用它。我以前想把这个问题提出来,但我忘了,对不起

主要类别:

import javax.swing.JFrame;
import java.awt.Graphics;
import javax.swing.JPanel;
import java.awt.Color;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import java.awt.BorderLayout; 
import java.awt.Canvas;
//import java.awt.event.KeyEvent;
import java.awt.event.*;

public class CharacterTest extends JFrame {

    /**
     * Creates a new instance of <code>CharacterTest</code>.
     */
    public CharacterTest() 
    {
        super("Character Test");            
        setSize(800, 800);                  //create the window         
        MCharacter C = new MCharacter();    //call the box so that it can be affected           
        getContentPane().add(C);            
        setVisible(true);                   //show the window

        /*
         Here I need to create a while loop using the determine method (while determine is false check for keytyped in MCharacter 
         so that it keeps checking for a key.
         I need to create a keyListener within the while loop and then depending on what key is pressed it will move.
         */

         while(C.determine(C.getX(), C.getY()) == false)
         {
            //if up arrow key pressed, C.setY(C.getY()-2);
            //if down arrow key pressed, C.setY(C.getY()+2);
            //if right arrow key pressed, C.setX(C.getX()+2);
            //if left arrow key pressed, C.setX(C.getX()-2);
         }
    }

    public void Movement(KeyEvent key)
    {

    }

    public static void main(String[] args) {
        // TODO code application logic here
        CharacterTest test = new CharacterTest();
    }
}
McCharacter类:

    import javax.swing.JFrame;
    import java.awt.Graphics;
    import javax.swing.JPanel;
    import java.awt.Color;
    import javax.swing.JLabel;
    import javax.swing.ImageIcon;
    import java.awt.BorderLayout; 
    import java.awt.Canvas;
    //import java.awt.event.KeyEvent;
    import java.awt.event.*;

    public class MCharacter extends Canvas {

    //these will be the instance variables for the character's parameters- its size and its location
    private int width;
    private int height;
    private int x;
    private int y;

    //some constructors that would easily be called
    public MCharacter() 
    {
        setBackground(Color.WHITE);
        setWidth(10);
        setHeight(10);
        setX(400);
        setY(400);
    }

    public MCharacter(int wth, int hgt)
    {
        setWidth(wth);
        setHeight(hgt);
        setX(400);
        setY(400);
    }

    public MCharacter(int wth, int hgt, int xPos, int yPos)
    {
        setWidth(wth);
        setHeight(hgt);
        setX(xPos);
        setY(yPos);
    }

    //setters for each of the variables
    public void setWidth(int wth)
    {
        width = wth;
    }

    public void setHeight(int hgt)
    {
        height = hgt;
    }

    public void setX(int xPos)
    {
        x = xPos;
    }

    public void setY(int yPos)
    {
        y = yPos;
    }

    //getters for each of the varaibles
    public int getWidth()
    {
        return width;
    }

    public int getHeight()
    {
        return height;
    }

    public int getX()
    {
        return x;
    }

    public int getY()
    {
        return y;
    }

    //I am going to call the paint method here and create a small box that I will use as the character
    public void paint(Graphics window)
    {
        window.setColor(Color.BLUE);
        window.fillRect(x, y, width, height);
    }

    //this method will be used to keep checking for a key pressed: while this is false check for a keytyped
    public boolean determine(int x, int y)
    {
        if( x >= 10 && x <= 790 && y >= 10 && y <= 790)
        {
            return false;
        }
        return true;
    }
}
import javax.swing.JFrame;
导入java.awt.Graphics;
导入javax.swing.JPanel;
导入java.awt.Color;
导入javax.swing.JLabel;
导入javax.swing.ImageIcon;
导入java.awt.BorderLayout;
导入java.awt.Canvas;
//导入java.awt.event.KeyEvent;
导入java.awt.event.*;
公共类MCharacter扩展画布{
//这些将是角色参数的实例变量—角色的大小和位置
私有整数宽度;
私人内部高度;
私人INTX;
私营企业;
//一些容易调用的构造函数
公共MCharacter()
{
挫折地面(颜色:白色);
设置宽度(10);
设置高度(10);
setX(400);
赛蒂(400);
}
公共MCharacter(内部wth、内部hgt)
{
设置宽度(wth);
设定高度(hgt);
setX(400);
赛蒂(400);
}
公共MCharacter(int-wth、int-hgt、int-xPos、int-yPos)
{
设置宽度(wth);
设定高度(hgt);
setX(xPos);
setY(yPos);
}
//每个变量的setter
公共空白设置宽度(整数宽度)
{
宽度=宽度;
}
公共空间设置高度(内部高度)
{
高度=hgt;
}
公共无效setX(int xPos)
{
x=xpo;
}
公共空间设置(int yPos)
{
y=YPO;
}
//每个变量的getter
公共int getWidth()
{
返回宽度;
}
公共整数getHeight()
{
返回高度;
}
公共int getX()
{
返回x;
}
公共int getY()
{
返回y;
}
//我将在这里调用paint方法并创建一个小框,我将使用它作为角色
公共空间绘制(图形窗口)
{
window.setColor(Color.BLUE);
fillRect(x,y,宽度,高度);
}
//此方法将用于持续检查按键:而这是对键入的按键的错误检查
公共布尔确定(整数x,整数y)
{

如果(x>=10&&x=10&&y.PS):您真的应该使用(仅限Swing——现在真的没有理由使用Canvas)对于这种类型的东西。
真的没有理由使用Canvas
-是的,不要在Swing应用程序中使用AWT组件。
你应该真正使用键绑定
也同意,有关使用键绑定的更多原因和工作示例,请参阅。我在最近的一次会议上帮助过有类似问题的人,我在会上讨论如何使用箭头键进行2D移动t、 您应该实现KeyListener。然后您可以使用键事件。