Давайте сначала посмотрим на визуализации:
Просто загрузите код.
Настраивайте кнопку и добавьте холст, чтобы нарисовать несколько кругов, а затем следить за. Полем Полем
Пакет cn.hncu.threaddemo.thread2; import java.awt.canvas; импорт java.awt.color; import java.awt.graphics; импорт java.awt.event.actionevent; import.ava.awt.event.actionlistener; Import. java.awt.event.focuslistener; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jpanel; импорт javax.swing.jspinner; импорт javax.swing.timer; import javax.swing.event.changeevent; import javax.swing.shantemel.shanger. changemel. Распространяет jframe реализует Changelistener {private Ballscanvas Ball; частный jspinner spinner; public ballsjframe () {super ("pineball"); this.SetBounds (300, 200, 400, 300); this.setDefaultCloseoperation (exit_on_close); Цвет цвета [] = {color.red, color.green, color.blue, color.magenta, color.cyan}; Ball = New Ballscanvas (цвета, 100); this.getContentPane (). Add (Ball); // По умолчанию является центральная позиция JPanel Panel = new jPanel (); this.getContentPane (). добавить (панель, "Юг"); panel.add (new jlabel ("delay")); spinner = new jspinner (); Spinner.SetValue (100); panel.add (spinner); Spinner.AddChangelistener (это); this.setvisible (true); } @Override public void stateChanged (changeEvent e) {int value = integer.parseint (""+spinner.getValue ()); ball.setdelay (значение); } public static void main (string [] args) {new Ballsjframe (); }} класс BallScanvas Extends Canvas Reculsings ActionListener, FocusListener {Private Ball Balls []; // Хранение All Balls Private Timer Timer; // javax.swing.timer public Ballscanvas (Color Colors [], int Dolement) {this.balls = new Ball [colorse.length]; for (int i = 0, x = 40; i <colors.length; i ++, x+= 20) {this.balls [i] = new Ball (x, x, colors [i]); } // Пусть текущее Canvas контролирует событие Focus this.addfocuslistener (это); таймер = новый таймер (задержка, это); timer.start (); } public void setDelay (int delay) {timer.setDelay (Delay); } @Override public void Paint (Graphics G) {for (int i = 0; i <this.balls.length; i ++) {g.setcolor (Balls [i] .color); // Пусть координаты каждого мяча --- (x координаты) шарики [i] .x = шары [i] .left? шары [i] .x-10: шарики [i] .x+10; // Когда мяч попадает в стену, измените направление шарика if (balls [i] .x <= 0 || шары [i] .x> = this.getWidth ()-24) {шарики [i] .left =! Balls [i] .left; // Переключение направления} // позволяют координатам каждого шарика-(y координаты) (i]. шары [i] .y-10: шары [i] .y+10; // Когда мяч попадает в стену, измените направление мяча if (balls [i] .y <= 0 || balls [i] .y> = this.getheight ()-22) {шарики [i] .up =! Balls [i] .up; // переключение направления} g.filloval (шарики [i] .x, balls [i] .y 20, 20); }} @Override public void actionPerformed (actionEvent e) {//system.out.println("aaa "); Repaint (); // Обновить холст. Call Paint (Graphics g)} @Override public void FocusGized (FocuseVent e) {timer.stop (); } @Override public void фокусировка (FocuseVent e) {timer.restart (); } частный статический класс Ball {int x, y; логический вверх, слева; Цвет цвета; public Ball (int x, int y, color) {this.x = x; this.y = y; this.color = color; up = Left = false; }}}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.