Jetons un coup d'œil aux rendus en premier:
Téléchargez simplement le code.
Affiner le bouton et ajouter la toile pour dessiner quelques cercles, puis surveiller. . .
Package cn.hncu.threaddemo.thread2; importer java.awt.canvas; import java.awt.color; import java.awt.graphics; import java.awt.event.actionevent; import java.awt.event.actionStener; import java.awt.event.foccusevent; import java.awt.event.focusListener; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jpanel; importer javax.swing.jspinner; import javax.swing.timer; étend JFrame implémente ChangeListener {Private BallScanvas Ball; Spinner Jspinner privé; public ballsjframe () {super ("Pineball"); this.setbounds (300, 200, 400, 300); this.setDefaultCloseOperation (exit_on_close); Couleurs Couleurs [] = {Color.Red, Color.Green, Color.Blue, Color.magenta, Color.cyan}; balle = nouveau balle de balle (couleurs, 100); this.getContentPane (). Add (ball); // par défaut est la position centrale jpanel panneau = new JPanel (); this.getContentPane (). Add (panneau, "Sud"); PANNEL.ADD (New JLabel ("Delay")); Spinner = new Jspinner (); Spinner.SetValue (100); panneau.add (spinner); Spinner.AddChangeListener (this); this.setVisible (true); } @Override public void statEchanged (changeevent e) {int value = Integer.ParseInt ("" + spinner.getValue ()); ball.setdelay (valeur); } public static void main (string [] args) {new BallsJFrame (); }} classe BallScanvas étend le canevas implémente ActionListener, focusListener {balles de balle privées []; // Storage toutes les balles Timer privé Timer; // javax.swing.timer public ballScanvas (couleurs de couleurs [], int delage) {this.balls = new Ball [couleurs.length]; pour (int i = 0, x = 40; i <couleurs.length; i ++, x + = 20) {this.balls [i] = new ball (x, x, couleurs [i]); } // Laissez le canevas actuel surveiller l'événement de mise au point this.addFocusListener (this); timer = new Timer (retard, this); timer.start (); } public void setDelay (intlade) {timer.setdelay (delay); } @Override public void peinture (graphiques g) {for (int i = 0; i <this.ball.length; i ++) {g.setColor (balls [i] .color); // Laissez les coordonnées de chaque balle --- (x coordonnées) Balls [i] .x = balles [i] .left? balles [i] .x-10: balles [i] .x + 10; // Lorsque la balle frappe un mur, changez la direction de la balle if (balles [i] .x <= 0 || balles [i] .x> = this.getWidth () - 24) {billes [i] .left =! Balles [i] .left; // commutation de direction} // Laisse les coordonnées de chaque changement de balle - (y coordonnées) balles [i] .y [i]. Balls [i] .y-10: balles [i] .y + 10; // Lorsque la balle frappe un mur, changez la direction de la balle if (balles [i] .y <= 0 || billes [i] .y> = this.getheight () - 22) {billes [i] .up =! Balls [i] .up; // commutation de commutation} g.filloval (balles [i] .x, balles [i] .y, 20, 20); }} @Override public void ActionPerformed (ActionEvent e) {//system.out.println("aaa "); repeindre (); // actualiser la toile. Appelez Paint (Graphiques G)} @Override public void focusgained (focUsevent e) {timer.stop (); } @Override public void focusLost (focUsevent e) {timer.Restart (); } classe de classe statique privée {int x, y; Boolean up, à gauche; Couleur couleur; Ball public (int x, int y, couleur couleur) {this.x = x; this.y = y; this.color = couleur; up = Left = false; }}}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.