Bonjour,
Débutant en java, j'essaie de faire un rectangle qui puisse être déplacé dans une fenêtre. J'ai donc utilisé (mal certainement) Keypressed mais cela n'entraine aucune modification. Est-il mal placé ?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Fenetre extends JFrame implements ActionListener, KeyListener {
private Panneau pan = new Panneau();
private JButton bouton = new JButton("Jouer!");
private JPanel container = new JPanel();
private boolean animation = true;
int x = pan.getPosX(), y = pan.getPosY();
public Fenetre()
{
this.setTitle("Rectangle");
this.setSize(400, 500);
this.setLocationRelativeTo(null);
this.setResizable(true); // Rend la fenetre agrandissable ou non
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
container.setBackground(Color.black);
container.setLayout(new BorderLayout());
container.add(pan, BorderLayout.CENTER);
container.add(bouton, BorderLayout.SOUTH);
bouton.addActionListener(this);
bouton.setEnabled(true); // Rend le bouton cliquable ou non
this.setContentPane(container);
this.setVisible(true);
bouge();
}
private void bouge(){
//
boolean backX = false;
boolean backY = false;
while(this.animation)
{
if(x<1)backX = false;
if(x > pan.getWidth()-30)backX = true;
if(y<1)backY = false;
if(y > pan.getHeight()-40)backY = true;
/*if(!backX)
pan.setPosX(++x);
Sinon, on décrémente
else
pan.setPosX(--x)*/;
//Idem pour l'axe Y
if(!backY)
pan.setPosY(++y);
else
pan.setPosY(--y);
pan.repaint();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void actionPerformed(ActionEvent arg0)
{
animation = false;
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch (key) {
case KeyEvent.VK_DOWN :
y+=1;
case KeyEvent.VK_UP:
y-=1;
break;
case KeyEvent.VK_RIGHT:
x+=1;
break;
case KeyEvent.VK_LEFT:
x-=1;
break;
}
repaint();
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
Je me trompe peut-être mais dans le BorderLayout, le composant CENTER prend toute la place disponible en plus, tu n'as pas défini de taille pour ton panneau. Donc il doit remplir tout l'espace et ne peut donc pas bouger.
Je te remercie pour ta réponse. Le fait d'avoir un bouton sur toute la largeur de la page est voulu.
J'ai réussi à résoudre mon problème.
Keypressed
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.