栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用KeyEventDispatcher

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用KeyEventDispatcher

您必须寻找KeyBindings

import java.awt.*;import java.awt.event.*;import java.awt.image.BufferedImage;import java.io.IOException;import java.net.*;import java.util.HashMap;import java.util.Map;import javax.imageio.ImageIO;import javax.swing.*;public class MoveIcon extends JPanel {    private static final long serialVersionUID = 1L;    private static final String IMAGE_PATH = "http://duke.kenai.com/misc/Bullfight.jpg";    private static final String IMAGE_PATH_PLAYER = "http://duke.kenai.com/iconSized/duke4.gif";    public static final int STEP = 3;    private static final int TIMER_DELAY = STEP * 8;    private BufferedImage bkgrndImage = null;    private BufferedImage playerImage = null;    private Map<Direction, Boolean> directionMap = new HashMap<Direction, Boolean>();    private int playerX = 0;    private int playerY = 0;    enum Direction {        UP(KeyEvent.VK_UP, 0, -1), DOWN(KeyEvent.VK_DOWN, 0, 1),        LEFt(KeyEvent.VK_LEFT, -1, 0), RIGHt(KeyEvent.VK_RIGHT, 1, 0);        private int keyCode;        private int xDirection;        private int yDirection;        private Direction(int keyCode, int xDirection, int yDirection) { this.keyCode = keyCode; this.xDirection = xDirection; this.yDirection = yDirection;        }        public int getKeyCode() { return keyCode;        }        public int getXDirection() { return xDirection;        }        public int getYDirection() { return yDirection;        }    }    public MoveIcon() {        try { URL bkgrdImageURL = new URL(IMAGE_PATH); URL playerImageURL = new URL(IMAGE_PATH_PLAYER); bkgrndImage = ImageIO.read(bkgrdImageURL); playerImage = ImageIO.read(playerImageURL); setPreferredSize(new Dimension(bkgrndImage.getWidth(), bkgrndImage.getHeight()));        } catch (MalformedURLException e) { e.printStackTrace();        } catch (IOException e) { e.printStackTrace();        }        for (Direction direction : Direction.values()) { directionMap.put(direction, false);        }        setKeyBindings();        Timer timer = new Timer(TIMER_DELAY, new TimerListener());        timer.start();    }    private void setKeyBindings() {        InputMap inMap = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);        ActionMap actMap = getActionMap();        for (final Direction direction : Direction.values()) { KeyStroke pressed = KeyStroke.getKeyStroke(direction.getKeyCode(), 0, false); KeyStroke released = KeyStroke.getKeyStroke(direction.getKeyCode(), 0, true); inMap.put(pressed, direction.toString() + "pressed"); inMap.put(released, direction.toString() + "released"); actMap.put(direction.toString() + "pressed", new AbstractAction() {     private static final long serialVersionUID = 1L;     @Override     public void actionPerformed(ActionEvent e) {         directionMap.put(direction, true);     } }); actMap.put(direction.toString() + "released", new AbstractAction() {     private static final long serialVersionUID = 1L;     @Override     public void actionPerformed(ActionEvent e) {         directionMap.put(direction, false);     } });        }    }    @Override    protected void paintComponent(Graphics g) {        super.paintComponent(g);        if (bkgrndImage != null) { g.drawImage(bkgrndImage, 0, 0, null);        }        if (playerImage != null) { g.drawImage(playerImage, playerX, playerY, null);        }    }    private class TimerListener implements ActionListener {        @Override        public void actionPerformed(ActionEvent e) { boolean moved = false; for (Direction direction : Direction.values()) {     if (directionMap.get(direction)) {         playerX += STEP * direction.getXDirection();         playerY += STEP * direction.getYDirection();         moved = true;     } } if (moved) {     int x = playerX - 2 * STEP;     int y = playerY - 2 * STEP;     int w = playerImage.getWidth() + 4 * STEP;     int h = playerImage.getHeight() + 4 * STEP;     MoveIcon.this.repaint(x, y, w, h); // !! repaint just the player }        }    }    private static void createAndShowUI() {        Jframe frame = new Jframe("MoveIcon");        frame.getContentPane().add(new MoveIcon());        frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);        frame.pack();        frame.setLocationRelativeTo(null);        frame.setVisible(true);    }    public static void main(String[] args) {        java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() {     createAndShowUI(); }        });    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/415755.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号