gpt4 book ai didi

java - 使用Keylistener后如何重新绘制图形?

转载 作者:太空宇宙 更新时间:2023-11-04 07:02:52 26 4
gpt4 key购买 nike

所以我的项目是创建一款射击类型的游戏,我希望当我按下箭头时我的方 block (之后将成为宇宙飞船)改变 x;y 位置。我们成功地测试了按键监听器的工作情况,因此我们确定问题来自重绘函数。

请帮忙,这是我们的代码:

n°1 级

import java.awt.Color; 


import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

import java.awt.Dimension;

import javax.swing.JFrame;

public class Fenetre extends JFrame implements KeyListener {
Panneau pan = new Panneau();
public Fenetre(){
//nom de la fenetre
this.setTitle("Projet");
//taille
this.setSize(450, 600);
//centrer la fenetre
this.setLocationRelativeTo(null);
//Fenetre toujours en premier plan
this.setAlwaysOnTop(true);
//arrêt du processus à la fermeture de la fenêtre
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Fenetre non redimensionnable
this.setResizable(false);
//Couleur du fond
this.setBackground(Color.DARK_GRAY);

//Instanciation d'un objet JPanel
JPanel pan = new JPanel();
JPanel tir = new JPanel();
//On prévient notre JFrame que notre JPanel sera son content pane
this.setContentPane(new Panneau());

this.setVisible(true);
this.addKeyListener(this);
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}


@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
int c = e.getKeyCode();
if(c==KeyEvent.VK_RIGHT){
int x = pan.getPosX();
x=x+10;
pan.setPosX(x);
pan.repaint();
System.out.print("Droite ");}
if(c==KeyEvent.VK_LEFT){
int x = pan.getPosX();
x=x-10;
pan.setPosX(x);
pan.repaint();
System.out.print("Gauche ");}
if(c==KeyEvent.VK_UP){
int y = pan.getPosY();
y=y+10;
pan.setPosY(y);
pan.repaint();
System.out.print("Haut ");}
if(c==KeyEvent.VK_DOWN){
int y = pan.getPosY();
y=y-10;
pan.setPosY(y);
pan.repaint();
System.out.print("Bas ");}
if(c==KeyEvent.VK_SPACE){
this.setBackground(Color.CYAN);



}


}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
int c = e.getKeyCode();
if(c==KeyEvent.VK_SPACE){
this.setBackground(Color.DARK_GRAY);}
}





}

第 n°2 级

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

import java.awt.Graphics;

import javax.swing.JPanel;

import java.awt.Graphics;
import java.awt.event.KeyListener;

import javax.swing.JPanel;

public class Panneau extends JPanel {

public int posX = 450/2-15;
public int posY = 500;

public void paintComponent(Graphics g){
g.setColor(Color.red);
g.fillRect(posX, posY, 30, 30);
System.out.print("Carré ");
}
public int getPosX() {
return posX;
}
public void setPosX(int posX) {
this.posX = posX;
}
public int getPosY() {
return posY;
}
public void setPosY(int posY) {
this.posY = posY;
}

}

我们的主要:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;


public class Main extends JFrame {
public static void main (String [] Args){
Fenetre fen = new Fenetre();


}}

PS:我们是初学者,所以我们很可能做错了很多事情

最佳答案

Panneau pan = new Panneau();

您正在创建 Panneau 实例,该实例在 keyPressed 方法中进行修改。但随着

this.setContentPane(new Panneau());

您正在将 Panneau实例添加到框架 - 该实例keyPressed 方法中进行修改。

代码还有一些其他问题,但要达到预期效果所需的最小更改是将这一行更改为

this.setContentPane(this.pan);

为了清除面板的背景(即删除之前绘制的矩形),您还必须在 paintComponent 方法的第一行调用 super.paintComponent(g):

public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.red);
g.fillRect(posX, posY, 30, 30);
System.out.print("Carré ");
}

关于java - 使用Keylistener后如何重新绘制图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21831965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com