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