1 pièce(s) jointe(s)
[Débutant] Interragir en cliquant sur paintComponent
Bonjour, je souhaiterais interagir avec une animation que j'ai créer afin de m’entraîner dans le langage Java. Voici exactement à quoi ressemble le programme.
Pièce jointe 148188
Ce que je souhaiterais faire avec ce programme c'est dès lors que je click sur la "balle" une Dialog box s'ouvre envoyant un message.
Je me doute que cela s'effectue grâce aux MouseListener.
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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
| import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Fenetre3 extends JFrame implements MouseListener{
/**
*
*/
private static final long serialVersionUID = 1L;
private Pananimation pan2 = new Pananimation();
private JButton btnnext2 = new JButton("NEXT");
private JPanel container2 = new JPanel();
public Fenetre(){
this.setTitle("Appli");
this.setSize(300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
container2.setBackground(Color.white);
container2.setLayout(new BorderLayout());
container2.add(pan2, BorderLayout.CENTER);
container2.add(btnnext2, BorderLayout.SOUTH);
this.setContentPane(container2);
this.setVisible(true);
go();
this.addMouseListener(this);
}
private void go(){
//Les coordonnées de départ de notre rond
int x = pan2.getX(), y = pan2.getY();
//Le booléen pour savoir si l'on recule ou non sur l'axe x
boolean backX = false;
//Le booléen pour savoir si l'on recule ou non sur l'axe y
boolean backY = false;
try {
// Pause pour simuler un traitement
Thread.sleep(100);
} catch (InterruptedException e) {}
//Dans cet exemple, j'utilise une boucle while
//Vous verrez qu'elle fonctionne très bien
while(true){
//Si la coordonnée x est inférieure à 1, on avance
if(x < 1)backX = false;
//Si la coordonnée x est supérieure à la taille du Panneau moins la taille du rond, on recule
if(x > pan2.getWidth()-50)backX = true;
//Idem pour l'axe y
if(y < 1)backY = false;
if(y > pan2.getHeight()-50)backY = true;
//Si on avance, on incrémente la coordonnée
if(!backX)
pan2.setPosX(++x);
//Sinon, on décrémente
else
pan2.setPosX(--x);
//Idem pour l'axe Y
if(!backY)
pan2.setPosY(++y);
else
pan2.setPosY(--y);
//On redessine notre Panneau
pan2.repaint();
//Comme on dit : la pause s'impose ! Ici, trois millièmes de seconde
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
btnnext2.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
dispose();
Fenetre4 fen4 = new Fenetre4(
);
}
});
}
}
@Override
public void mouseClicked(MouseEvent e) {
JOptionPane.showMessageDialog(null," mouseClicked ","Information",JOptionPane.INFORMATION_MESSAGE);<br>
}
@Override
public void mousePressed(MouseEvent e) {
JOptionPane.showMessageDialog(null,"mousePressed","Information",JOptionPane.INFORMATION_MESSAGE);
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
} |
Si quelqu'un peut m'aider ce serait sympa :) !