大吃一278 2022-11-30 09:12 采纳率: 84%
浏览 15
已结题

以下程序实现在窗口绘制小球

以下程序实现在窗口绘制小球,通过键盘控制小球上下左右的移动。请修改程序,使用继承KeyAdapter类的匿名内部类方式实现键盘事件处理。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class KeyTest extends JFrame{
    MyPanel mp = null;    
    public KeyTest(){
        mp = new MyPanel();
        add(mp);
        addKeyListener(mp);
        setSize(400,300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }
public static void main(String[] args) {
        new KeyTest();
    }
}
class MyPanel extends JPanel implements KeyListener {
    int x = 30;
    int y = 30;
    public void paint(Graphics g){
        super.paint(g);
        g.fillOval(x,y,12,12);
    }
    public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}    
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode()==KeyEvent.VK_UP)
            y -= 10;
        else if(e.getKeyCode()==KeyEvent.VK_DOWN)
            y += 10;
        else if(e.getKeyCode()==KeyEvent.VK_LEFT)
            x -= 10;
        else if(e.getKeyCode()==KeyEvent.VK_RIGHT)
            x += 10;
        repaint();
    }    
}    

  • 写回答

1条回答 默认 最新

  • wukong3366159 2022-12-01 10:42
    关注
    
    public class KeyTest extends JFrame{
        MyPanel mp = null;    
        public KeyTest(){
            mp = new MyPanel();
            addKeyListener(new t());
            add(mp);
            setSize(400,300);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setVisible(true);
        }
        class t extends KeyAdapter
        {
            public void keyPressed(KeyEvent e) {
                 if(e.getKeyCode()==KeyEvent.VK_UP)
                        mp.y -= 10;
                    else if(e.getKeyCode()==KeyEvent.VK_DOWN)
                        mp.y += 10;
                    else if(e.getKeyCode()==KeyEvent.VK_LEFT)
                        mp.x -= 10;
                    else if(e.getKeyCode()==KeyEvent.VK_RIGHT)
                        mp.x += 10;
                    mp.repaint();
            }
            
        }
    public static void main(String[] args) {
            new KeyTest();
        }
    }
    class MyPanel extends JPanel  {
        int x = 30;
        int y = 30;
        public MyPanel()
        {
            //this.addKeyListener(this);
        }
        public void paint(Graphics g){
            super.paint(g);
            g.fillOval(x,y,12,12);
        }
        
        }    
    }    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月1日
  • 已采纳回答 12月1日
  • 创建了问题 11月30日

悬赏问题

  • ¥15 Omi框架如何兼容Vue
  • ¥15 windows api中有没有可以通过scsi设备发送离散buffer的接口,如何解决?(相关搜索:linux系统|结构体)
  • ¥15 r语言练习题,三个问题都有疑惑
  • ¥15 绝对路径都行,为什么相对路径不行
  • ¥20 ARM64架构下SSCMS部署问题
  • ¥20 请教如何让移动端的热区自适应
  • ¥30 为什么深度学习网络训练会出现训练集和测试集准确率和损失都不变的情况
  • ¥66 如何adb的情况下找打手机隐藏的文件
  • ¥15 (标签-3D|关键词-色模型)
  • ¥15 实时声纹降噪算法进行无关说话人语音抑制