Java 键侦听器以移动我拥有的图像

Java 键侦听器以移动我拥有的图像,java,swing,keylistener,Java,Swing,Keylistener,我在JFrame上添加了一个图像星。我想知道如何使用键侦听器移动它。 我很困惑,希望有人能帮助我 段落(来自希腊语段落,“在旁边写”或“在旁边写”)(Khalil Milanes)是写作中论述某一特定观点或观点的独立单元。段落有5种类型(Br.安东·海特曼)。段落由一个或多个句子组成。[1][2]尽管任何语言的语法都不要求段落,但段落通常是正式写作的预期部分,用于组织较长的散文。 代码如下: public class PicLoad extends JFrame { PicLoad()

我在JFrame上添加了一个图像星。我想知道如何使用键侦听器移动它。 我很困惑,希望有人能帮助我

段落(来自希腊语段落,“在旁边写”或“在旁边写”)(Khalil Milanes)是写作中论述某一特定观点或观点的独立单元。段落有5种类型(Br.安东·海特曼)。段落由一个或多个句子组成。[1][2]尽管任何语言的语法都不要求段落,但段落通常是正式写作的预期部分,用于组织较长的散文。 代码如下:

public class PicLoad extends JFrame {

    PicLoad(){
    add(new Board());


    pack();

    setLocationRelativeTo(null);        
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setVisible(true);
}


public static void main(String[] args) {
    new PicLoad();
}
}
以下是我需要帮助的部分:

class Board extends JPanel {


    int dx;
    int dy;
    int x = 100;
    int y = 100;
    Image star;
    Board(){
        // I figured here is the keylister, i need it to move the dx and dy around.
        addKeyListener(new KeyAdapter(){
            public void keyPressed(KeyEvent e){
            int key = e.getKeyCode();
            if(key == KeyEvent.VK_LEFT) dx -= 1;
            if(key == KeyEvent.VK_RIGHT) dx += 1;
            if(key == KeyEvent.VK_UP) dy += 1;
            if(key == KeyEvent.VK_DOWN) dy -= 1;
         }
        });
        initBoard();
        loadImage();

}
void loadImage(){
    ImageIcon ii = new ImageIcon("star.png");
    star = ii.getImage();        
}
void initBoard(){
    setBackground(Color.BLACK);
    setPreferredSize(new Dimension(500,500));

}

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    drawStar(g);
}

private void drawStar(Graphics g) {

    Graphics2D g2d = (Graphics2D) g;
    g2d.drawImage(star, dx + x, dy+ y, this);
    Toolkit.getDefaultToolkit().sync();
    g.dispose();    

}


// at the top is the drawStar method used to put it in the frame in which I want the keys to //move it around
}
要使更改可见,应执行以下操作:

if(key == KeyEvent.VK_DOWN) dy -= 1;
repaint(); // requests the component paint itself
..
更新 代码中还有其他问题。这里是一个作为MCVE的工作(除了上下交换(BNI))版本

import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;

public class PicLoad extends JFrame {

PicLoad(){
    add(new Board());
    pack();

    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
}

public static void main(String[] args) {
    new PicLoad();
}
}

class Board extends JPanel {

    int dx;
    int dy;
    int x = 100;
    int y = 10;
    Image star = new BufferedImage(40,40,BufferedImage.TYPE_INT_RGB);
Board() {
        // I figured here is the keylister, i need it to move the dx and dy around.
        addKeyListener(new KeyAdapter(){
            public void keyPressed(KeyEvent e){
            int key = e.getKeyCode();
            if(key == KeyEvent.VK_LEFT) dx -= 1;
            if(key == KeyEvent.VK_RIGHT) dx += 1;
            if(key == KeyEvent.VK_UP) dy += 1;
            if(key == KeyEvent.VK_DOWN) dy -= 1;
            repaint();
         }
        });
        initBoard();
}

void initBoard() {
    setBackground(Color.RED);
    /* See Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods
    in Java Swing? http://stackoverflow.com/q/7229226/418556  (Yes.) */
    //setPreferredSize(new Dimension(500,500));
    setFocusable(true); // VERY IMPORTANT!
}

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    drawStar(g);
}

@Override
public Dimension getPreferredSize() {
    return new Dimension(500,100);
}

private void drawStar(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;
    g2d.drawImage(star, dx + x, dy+ y, this);
    //Toolkit.getDefaultToolkit().sync();  //  What were you thinking?!?
    //g.dispose(); // Don't dispose of a Graphics object unless you create it!
}
}


当您收到错误消息说您没有足够的解释性文本时,您是否认为通过粘贴不相关的文本可以解决此问题?1)为了更快获得更好的帮助,请发布一个(最小完整且可验证的示例)。2) 对于Swing,通常在基于AWT的较低级别上使用键绑定,
KeyListener
。有关如何使用它们的详细信息,请参阅。
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;

public class PicLoad extends JFrame {

PicLoad(){
    add(new Board());
    pack();

    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
}

public static void main(String[] args) {
    new PicLoad();
}
}

class Board extends JPanel {

    int dx;
    int dy;
    int x = 100;
    int y = 10;
    Image star = new BufferedImage(40,40,BufferedImage.TYPE_INT_RGB);
Board() {
        // I figured here is the keylister, i need it to move the dx and dy around.
        addKeyListener(new KeyAdapter(){
            public void keyPressed(KeyEvent e){
            int key = e.getKeyCode();
            if(key == KeyEvent.VK_LEFT) dx -= 1;
            if(key == KeyEvent.VK_RIGHT) dx += 1;
            if(key == KeyEvent.VK_UP) dy += 1;
            if(key == KeyEvent.VK_DOWN) dy -= 1;
            repaint();
         }
        });
        initBoard();
}

void initBoard() {
    setBackground(Color.RED);
    /* See Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods
    in Java Swing? http://stackoverflow.com/q/7229226/418556  (Yes.) */
    //setPreferredSize(new Dimension(500,500));
    setFocusable(true); // VERY IMPORTANT!
}

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    drawStar(g);
}

@Override
public Dimension getPreferredSize() {
    return new Dimension(500,100);
}

private void drawStar(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;
    g2d.drawImage(star, dx + x, dy+ y, this);
    //Toolkit.getDefaultToolkit().sync();  //  What were you thinking?!?
    //g.dispose(); // Don't dispose of a Graphics object unless you create it!
}
}