Bonjour,
Alors voilà, j'aimerais réaliser une petite Applet en java.
Une fenêtre, un bouton. Lorsque l'on clique sur le bouton, une boule se crée, se balade dans l'écran en rebondissant sur la fenêtre.
Si l'on reclique sur le bouton, une boule se re-cré ... Indéfiniment.
En fait, j'ai réussi à le faire, mais je suis même plutôt étonné que cela fonctionne. J'ai trouvé en tatônnant donc j'aimerais savoir s'il existe une méthode moins barbare. De plus j'ai un problème mini problème : Chaque boule bouge grâce à un Thread, ce qui permet de garder la fenêtre active.
Lorsque la boule est la dernière cliquée, je suppose que le JPanel à toujours la capacité de connaître la taille de ma fenêtre.
Si je clique de nouveau sur ajout de bouton et que je re-dimensionne ma fenêtre, seule la dernière boule va voir que la fenêtre est plus grande / petite et s'actualiser. Les autres ne remarquent plus le changement de fenêtre ...
Place au code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class MainFrame extends JFrame implements ActionListener { private JButton button = new JButton("Create !"); private JPanel panel = new JPanel(); private JPanel panelsud = new JPanel(); public MainFrame() { this.setVisible(true); this.setTitle("Moving Balls"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panel.setLayout(new BorderLayout()); panelsud.setLayout(new BorderLayout()); panel.add(panelsud, BorderLayout.SOUTH); panelsud.add(button, BorderLayout.WEST); panel.setBackground(Color.white); button.addActionListener(this); this.setContentPane(panel); this.setSize(400, 400); this.setLocationRelativeTo(null); } public void actionPerformed(ActionEvent arg0) { Ball ball = new Ball(); panel.add(ball, BorderLayout.CENTER); Thread thread = new Thread(ball); thread.start(); panel.updateUI(); } }
Voici comment se crée mon objet Ball :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 import java.awt.Color; import java.awt.Graphics; import java.util.Random; import javax.swing.*; public class Ball extends JPanel implements Runnable { private int x = (int) (Math.random() * 400); private int y = (int) (Math.random() * 400); private int width = (int) (Math.random() * 100); private int prevx = x; private int prevy = y; private boolean moveX; private boolean moveY; private Color[] color = { Color.blue, Color.pink, Color.orange, Color.red, Color.black, Color.cyan, Color.GREEN, Color.yellow }; private Color ColorDefinitive = color[(int) (Math.random() * color.length)]; @Override protected void paintComponent(Graphics g) { g.setColor(Color.white); g.fillOval(prevx, prevy, width, width); g.setColor(ColorDefinitive); g.fillOval(x, y, width, width); prevx = x; prevy = y; } private void move() { while (true) { if (x < 1) moveX = true; else if (x > this.getWidth() - 30) moveX = false; if (y < 1) moveY = true; else if (y > this.getHeight() - 30) moveY = false; if (moveX) { x++; } else { x--; } if (moveY) { y++; } else { y--; } this.repaint(); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } public void run() { move(); } }
Voilà voilà, j'espère avoir un peu d'aide ici, car dans l'environnement où j'évolue, les mecs ont tout simplement décidé de ne pas faire l'exercice![]()
Partager