首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java AWT 事件監聽實戰:鍵盤控制小球移動完整代碼解析

     編輯:Java 綜合教學

Java AWT 事件監聽實戰:鍵盤控制小球移動完整代碼解析

本實例實現鍵盤方向鍵控制小球上下左右移動,鬆開按鍵自動歸位。核心技術點:KeyListener 接口實現、鍵碼映射、焦點管理與重繪觸發。

完整代碼

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

public class KeyListenerDemo {
    public static void main(String[] args) {
        Frame frame = new Frame();
        frame.setSize(800, 800);
        frame.setBackground(Color.BLACK);
        MyPanel myPanel = new MyPanel();
        frame.add(myPanel);
        // 關鍵:同時註冊到 Frame 和 Panel 確保獲取焦點
        frame.addKeyListener(myPanel);
        myPanel.addKeyListener(myPanel);
        frame.show();
    }
}

class MyPanel extends Panel implements KeyListener {
    int x = 150;
    int y = 150;

    @Override
    public void paint(Graphics g) {
        g.setColor(Color.WHITE);
        g.fillOval(x, y, 20, 20);
    }

    @Override
    public void keyPressed(KeyEvent e) {
        switch (e.getKeyCode()) {
            case 37: x--; break;      // 左
            case 38: y -= 10; break;  // 上
            case 39: x += 10; break;  // 右
            case 40: y += 10; break;  // 下
        }
        repaint(); // 必須調用觸發重繪!
    }

    @Override
    public void keyReleased(KeyEvent e) {
        // 鬆開按鍵歸位
        x = 150;
        y = 150;
        repaint();
    }

    @Override
    public void keyTyped(KeyEvent e) { /* 不使用 */ }
}

關鍵技術解析

  1. 雙重註冊監聽器:frame.addKeyListener() + panel.addKeyListener() 解決焦點獲取問題
  2. 鍵碼常量:37/38/39/40 對應左/上/右/下,建議使用 KeyEvent.VK_LEFT 等常量提高可讀性
  3. repaint() 必不可少:坐標變更後必須調用觸發 paint() 重繪
  4. 事件分離:keyPressed 處理移動,keyReleased 處理歸位邏輯
鍵盤控制小球演示:按方向鍵移動,鬆開自動回中心
運行效果:按住方向鍵移動,鬆開自動返回中心點 (150,150)

進階優化建議

  • 使用 KeyEvent.VK_* 常量替換魔術數字
  • 添加邊界檢測防止小球移出可視區域
  • 引入速度變量實現平滑移動而非固定步長
  • 考慮迁移至 Swing (JPanel + KeyBinding) 獲得更好焦點管理

此例為 Java 事件驅動編程入門範本,掌握監聽器模式、事件分發、繪圖更新三大核心機制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved