Vamos dar uma olhada nas renderizações primeiro:
Basta fazer upload do código.
Ajuste o botão e adicione a tela para desenhar alguns círculos e depois monitore. . .
pacote cn.hncu.threaddemo.thread2; importar java.awt.canvas; importar java.awt.color; importar java.awt.graphics; importar java.awt.event.actionEvent; import java.awt.event.eactionListener; importar java.awt.event; java.awt.event.focusListener; importar javax.swing.jframe; importar javax.swing.jlabel; importar javax.swing.jpanel; importar javax.swing.jspinner; importenking javax.swing.timer javax.swing.event.ChangeVent; importanten; importanten; estende o jframe implementa Changelistener {bola de bola privada; Spinner privado jspinner; public Ballsjframe () {super ("Pineball"); this.setbounds (300, 200, 400, 300); this.setDefaultCloseoperation (exit_on_close); Cores de cores [] = {color.red, color.green, color.blue, color.magenta, color.cyan}; bola = novo ballscanvas (cores, 100); this.getContentPane (). add (ball); // padrão é a posição central jpanel painel = new jpanel (); this.getContentPane (). Add (painel, "sul"); painel.add (New Jlabel ("Atraso")); spinner = new jspinner (); spinner.setValue (100); painel.add (spinner); spinner.addchangelistener (isto); this.setVisible (true); } @Override public void Statechanged (ChangeEvent e) {int value = Integer.parseint (""+spinner.getValue ()); ball.setDelay (valor); } public static void main (string [] args) {new Ballsjframe (); }} classe Ballscanvas estende a tela implementa o ActionListener, FocusListener {Balls Private Balls []; // Armazene todas as bolas Timer privado Timer; // javax.swing.timer public ballscanvas (cores coloridas [], int delay) {this.balls = new Ball [colors.Length]; para (int i = 0, x = 40; i <colors.length; i ++, x+= 20) {this.balls [i] = new Ball (x, x, cores [i]); } // Deixe a tela atual monitorar o evento de foco this.addfocusListener (this); Timer = novo timer (atraso, isso); timer.start (); } public void setDelay (int deoun) {timer.setDelay (atraso); } @Override public void Paint (gráficos g) {for (int i = 0; i <this.balls.length; i ++) {g.setColor (bolas [i] .color); // Deixe as coordenadas de cada bola --- (x coordenadas) bolas [i] .x = bolas [i] .left? bolas [i] .x-10: bolas [i] .x+10; // Quando a bola atingir uma parede, altere a direção da bola if (bolas [i] .x <= 0 || bolas [i] .x> = this.getwidth ()-24) {bolas [i] .Left =! Balls [i] .Left; // Switch Direction} // Deixe a coordenada de cada mudança de bola. bolas [i] .y-10: bolas [i] .y+10; // Quando a bola atingir uma parede, mude a direção da bola if (bolas [i] .y <= 0 || bolas [i] .y> = this.gethight ()-22) {bola [i] .up =! }} @Override public void ActionPerformed (ActionEvent e) {//system.out.println("aaa "); repintar (); // Atualize a tela. Call Paint (Gráfico G)} @Override public void focuned (focusevent e) {timer.stop (); } @Override public void focuslost (focusevent e) {timer.restart (); } classe estática privada bola {int x, y; Booleano para cima, à esquerda; Cor cor; public ball (int x, int y, cor de cor) {this.x = x; this.y = y; this.color = cor; up = esquerda = false; }}}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.