【发布时间】:2015-07-18 09:03:20
【问题描述】:
好的,所以我正在尝试创建一个 Jpanel,它创建一个可以在屏幕上移动的圆圈。我已经来回走了一段时间,似乎无法弄清楚如何让实际的东西为我移动。
package astroidlab;
import java.awt.BorderLayout;
import javax.swing.JFrame;
public class MainFrame {
public static void main(String[] args) {
//components
JFrame jf = new JFrame();
PaintObjects po = new PaintObjects();
jf.setLayout(new BorderLayout());
jf.add(po, BorderLayout.CENTER);
jf.setVisible(true);
jf.setSize(300, 300);
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
这是框架类。 ^^
package astroidlab;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import javax.swing.Timer;
public class PaintObjects extends JPanel implements ActionListener{
//global variable
Ship s = new Ship();
//constructor
public PaintObjects() {
super();
Timer t = new Timer(50, this);
t.start();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponents(g);
g.setColor(Color.BLACK);
g.fillOval(s.getXpos(), s.getYpos(), s.getHeight(), s.getWidth());
}
@Override
public void actionPerformed(ActionEvent ae) {
int xpos = s.getXpos();
int ypos = s.getYpos();
repaint();
}
}
上面的类应该绘制对象并更新它们。它确实绘制了椭圆形,但我似乎无法融入我的下一堂课。
package astroidlab;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class MoveShip extends JFrame{
Ship s = new Ship();
public MoveShip() {
ballMover bm = new ballMover();
this.addKeyListener(bm);
}
private class ballMover implements KeyListener {
@Override
public void keyPressed(KeyEvent ke) {
if(ke.getKeyCode() == 37) {
s.goLeft();
}
if(ke.getKeyCode() == 39) {
s.goRight();
}
if(ke.getKeyCode() == 38) {
s.goUp();
}
if(ke.getKeyCode() == 40) {
s.goDown();
}
}
@Override
public void keyReleased(KeyEvent ke) {
}
@Override
public void keyTyped(KeyEvent ke) {
}
}
}
上面的课程似乎是我出错的地方。我对图形没有经验,所以我觉得我只是错过了一些简单的东西。
package astroidlab;
public class Ship {
//fields
int xpos = 0;
int ypos = 0;
int height = 20;
int width = 20;
public Ship() {
super();
}
//move methods
public void goLeft() {
xpos -= 2;
System.out.println("xpos: " + xpos + " ypos: " + ypos);
}
public void goRight() {
xpos += 2;
System.out.println("xpos: " + xpos + " ypos: " + ypos);
}
public void goUp() {
ypos -= 2;
System.out.println("xpos: " + xpos + " ypos: " + ypos);
}
public void goDown() {
ypos += 2;
System.out.println("xpos: " + xpos + " ypos: " + ypos);
}
//get methods
public int getXpos() {
return xpos;
}
public int getYpos() {
return ypos;
}
public int getHeight() {
return height;
}
public int getWidth() {
return width;
}
//set methods
public void setXpos() {
this.xpos = xpos;
}
public void setYpos() {
this.ypos = ypos;
}
public void setHeight() {
this.height = height;
}
public void setWidth() {
this.width = width;
}
}
然后这个类会跟踪椭圆的位置,并在按下一个键时更新它。 (或者应该)
无论如何,我们将不胜感激。我确定我只是在做一些菜鸟错误。提前致谢。
【问题讨论】:
标签: java swing graphics actionlistener keylistener