【问题标题】:I cannot draw objects and have them move on the screen我无法绘制对象并让它们在屏幕上移动
【发布时间】:2015-07-12 05:30:50
【问题描述】:

我可以在屏幕上绘制静态的东西,但我想通过用户键输入使它们移动。我不知道该怎么办,我一直在寻找和寻找,还没有想出答案。请帮忙!

package com.Game.game;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Game extends JFrame
{

final static int width = 500;
final static int height = 500;

public int x = 250;
public int y = 250;
public int changeX = 10;
public int changeY = 10;

public static void main(String[] args)
{
    new Game();
}

public Game()
{
    KeyListener listener = new KeyListening();
    addKeyListener(listener);
    setFocusable(true);
    DrawingStuff drawingstuff = new DrawingStuff();
    add(drawingstuff);
    setSize(width, height);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
}

public class DrawingStuff extends JPanel
{
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawString("Hey there!", 300, 300);
        g.setColor(Color.RED);
        g.fillRect(x, y, 50, 50);
    }
}

public class KeyListening implements KeyListener
{
    DrawingStuff drawingstuff = new DrawingStuff();
    @Override
    public void keyPressed(KeyEvent e) 
    {
        if(e.getKeyCode() == KeyEvent.VK_UP)
        {
            y = y + changeY;
            System.out.println("Hey");
            drawingstuff.repaint();
        }

    }
    @Override
    public void keyReleased(KeyEvent e) 
    {


    }
    @Override
    public void keyTyped(KeyEvent e) 
    {


    }
}


public void update()
{

}
}

编辑: 已修复。我在构造方法中去掉了关键的监听器东西,在构造方法中添加了一个专注于“绘图材料”的命令,最重要的是,在构造方法的末尾添加了这段代码:

while(true)
    {
        drawingstuff.repaint();
    }

【问题讨论】:

  • 即使可行,恕我直言,在 while 循环中执行 #repaint() 不是正确的方法。

标签: java swing jframe jpanel keylistener


【解决方案1】:

问题是您的 KeyListening 对象引用了一个不同的 DrawingStuff 对象,而不是您在 Game 构造函数中添加到 UI 中的对象。

public class KeyListening implements KeyListener
{
    DrawingStuff drawingstuff = new DrawingStuff();
    ...

您应该将DrawingStuff 引用传递给KeyListening 实例,以便它可以告诉正确的对象重新绘制自己。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多