我可以在屏幕上绘制静态内容,但我希望通过用户键输入来移动它们。我不知道该怎么做,我一直在搜索和搜索,但还没有找到答案。请帮忙!
class User < ActiveRecord::Base
has_many :records
end
class Record < ActiveRecord::Base
belongs_to :user
belongs_to :drop
end
class Drop < ActiveRecord::Base
has_many :records
end
编辑: 修正了它。我在构造函数方法中删除了关键监听器的东西,在构造函数方法中添加了一个关注“drawingstuff”的命令,最重要的是,将这段代码添加到构造函数方法的末尾:
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()
{
}
}
答案 0 :(得分:0)
问题是,您的KeyListening
对象引用了与DrawingStuff
构造函数中添加到UI的对象不同的Game
对象。
public class KeyListening implements KeyListener
{
DrawingStuff drawingstuff = new DrawingStuff();
...
您应该将DrawingStuff
引用传递给KeyListening
实例,以便它可以告诉正确的对象重绘自己。