Problème de border ( drawRect dans une Jframe)
Bonjour,
J'ai un programme tout bête qui m'affiche une image en fond d'un Jframe, et un rectangle qui sert de curseur. J'arrive à le déplacer par clavier... cependant....
quelle que soit les dimensions de mon Jframe, le rectangle devient "invisible" au delà d'une certaine distance du point 0;0... (Je dirais à la moitié de l'axe des x et aux 2/3 de l'axe des y).
Pour être plus précis, j'ai println() les coordonés du rectangle et il continue en fait sa course même si je ne le vois plus.
Voici le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| package jeux2;
import javax.swing.JFrame;
import java.awt.Dimension;
public class Main {
public static Fond fond = new Fond();
public static void main(String[] args){
JFrame fenetre = new JFrame("Test");
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenetre.setSize(new Dimension(1920, 1200));
fenetre.setLocationRelativeTo(null);
fenetre.setResizable(false);
fenetre.setAlwaysOnTop(false);
fenetre.setUndecorated(true);
fenetre.setContentPane(fond);
fenetre.setVisible(true);
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| package jeux2;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class clavier implements KeyListener{
//@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_Z){
Main.fond.setDy(-5);
}
if(e.getKeyCode() == KeyEvent.VK_S){
Main.fond.setDy(5);
}
if(e.getKeyCode() == KeyEvent.VK_Q){
Main.fond.setDx(-5);
}
if(e.getKeyCode() == KeyEvent.VK_D){
Main.fond.setDx(5);
}
}
@Override
public void keyReleased(KeyEvent arg0) {
Main.fond.setDx(0);
Main.fond.setDy(0);
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| package jeux2;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class Fond extends JPanel {
private static final long serialVersionUID = 2290215993065771323L;
public int x ;
public int y ;
public int dx ;
public int dy ;
public ImageIcon icoFond;
public Image fond;
public Fond(){
super();
icoFond = new ImageIcon(getClass().getResource("img/earth_map_ocean_continents_1920x1200.jpg"));
this.fond = this.icoFond.getImage();
this.setFocusable(true);
this.addKeyListener(new clavier());
Thread chrono = new Thread(new Chrono());
chrono.start();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics g2 = (Graphics2D)g;
g2.drawImage(this.fond,0,0,null);
g2.setColor(Color.RED);
g2.drawRect(this.getX(),this.getY(),32,32);
System.out.println(this.getX());
this.deplacement();
}
public void deplacement(){
this.x = this.x + this.dx ;
this.y = this.y + this.dy;
}
// Getters et Setters
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getDx() {
return dx;
}
public void setDx(int dx) {
this.dx = dx;
}
public int getDy() {
return dy;
}
public void setDy(int dy) {
this.dy = dy;
}
public Image getFond() {
return fond;
}
public void setFond(Image fond) {
this.fond = fond;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| package jeux2;
public class Chrono implements Runnable{
private int PAUSE = 3;
@Override
public void run() {
while(true){
Main.fond.repaint();
try {
Thread.sleep(PAUSE);
} catch (InterruptedException e) {}
}
}
} |