求大神指点,我是刚学的菜鸟

gustar_h 2014-11-23 10:40:26
我想实现在JFrame中画出一个图形,然后让键盘按键控制图形的移动
但是按下按键后图形移动部了,求大神指点。。。。。
package deal;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
public class move extends JFrame {
int x=80,y=80,speed=10;
Color redColor;
private static final long serialVersionUID = 1L;
public move(){
addKeyListener(new KeyAdapter(){
public void keyPressed( KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_W){
y=y-speed;
System.out.println("\n Go Up");
}else if(e.getKeyChar()==KeyEvent.VK_S){
y=y+speed;
System.out.println("\n Go Down");
}else if(e.getKeyCode()==KeyEvent.VK_A){
x=x-speed;
System.out.println("\n Go Left");
}else if(e.getKeyCode()==KeyEvent.VK_D){
System.out.println("\n Go Right");
x=x+speed;
}else {
System.out.println(e.getKeyChar());
repaint();
}
}
});
setSize(400,300);
setVisible(true);
setLocation(400,200);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dispose();
System.exit(0);
}
});
}
public void paint(Graphics g){
g.setColor(Color.GREEN);
g.fillRect(x, y, 40, 40);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new move();
}

...全文
133 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gustar_h 2014-11-25
  • 打赏
  • 举报
回复
都是大神啊,刚开始学Java
ghx287524027 2014-11-24
  • 打赏
  • 举报
回复
楼上的即可,建议楼主扎实一下基础
Inhibitory 2014-11-24
  • 打赏
  • 举报
回复
问题很多:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Move extends JPanel {
    private int x = 80;
    private int y = 80;
    private int speed = 10;

    public Move() {
        setFocusable(true); // [[1]] JPanel 默认是得不到焦点的,这里设置 JPanel 可以得到焦点
        requestFocus();

        addKeyListener(new KeyAdapter() {
            public void keyPressed( KeyEvent e) {
                if(e.getKeyCode()==KeyEvent.VK_W) {
                    y=y-speed;
                    System.out.println("\n Go Up");
                    repaint();
                } else if(e.getKeyChar()==KeyEvent.VK_S) {
                    y=y+speed;
                    System.out.println("\n Go Down");
                    repaint();
                } else if(e.getKeyCode()==KeyEvent.VK_A) {
                    x=x-speed;
                    System.out.println("\n Go Left");
                    repaint();
                } else if(e.getKeyCode()==KeyEvent.VK_D) {
                    System.out.println("\n Go Right");
                    x=x+speed;
                    repaint();
                } else {
                    System.out.println(e.getKeyChar());
                }
            }
        });
    }

    // [[2]] 不要在 JFrame 或者 任意的 JComponent 及其子类的 paint() 方法里绘制
    // 绘制要用在 paintComponent() 里,因为 JPanel 提供了双缓冲的功能
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.setColor(Color.GREEN);
        g.fillRect(x, y, 40, 40);
    }

    private static void createAndShowGui() {
        JFrame frame = new JFrame();

        frame.getContentPane().add(new Move());

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setLocationRelativeTo(null); // [[3]] 居中显示主窗口
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        // [[4]] 由于 Swing 的线程问题,所以为了安全,放在下面的方法里创建主窗口
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGui();
            }
        });
    }
}

51,407

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧