먼저 렌더링을 살펴 보겠습니다.
코드를 업로드하십시오.
버튼을 미세 조정하고 캔버스를 추가하여 몇 개의 원을 그린 다음 모니터링하십시오. . .
패키지 CN.hncu.threaddemo.thread2; import java.awt.canvas; import java.awt.color; import java.awt.graphics; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.event.focusevent; import; java.awt.event.focuslistener; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jpanel; import javax.swing.jspinner; import javax.swing.timer; import javax.swing.event.changeevent; import javax.swing. javax.swing Ballsjframe은 Jframe 구현을 changelistener {private ballscanvas ball; 개인 JSPINNER 스피너; 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 (Colors, 100); this.getContentPane (). add (ball); // 기본값은 중심 위치 jpanel 패널 = new jpanel (); this.getContentPane (). add (패널, "south"); PALEN.ADD (New Jlabel ( "Delay")); 스피너 = 새로운 jspinner (); Spinner.setValue (100); PALEN.ADD (스피너); Spinner.addchangelistener (this); this.set -Visible (true); } @Override public void stateChanged (changeEvent e) {int value = integer.parseint ( ""+spinner.getValue ()); ball.setDelay (값); } public static void main (String [] args) {new ballsjframe (); }} Class BallScanvas는 캔버스를 확장합니다 actionListener, FocusListener {private ball balls []; // 모든 공 개인 타이머 타이머를 저장합니다. // javax.swing.timer public ballscanvas (색상 색상 [], int 지연) {this.balls = new Ball [Colors.length]; for (int i = 0, x = 40; i <colors.length; i ++, x+= 20) {this.balls [i] = new ball (x, x, colors [i]); } // 현재 캔버스가 포커스 이벤트를 모니터링하게하십시오. 타이머 = 새 타이머 (지연, this); timer.start (); } public void setDelay (int delay) {timer.setDelay (지연); } @override public void Paint (그래픽 g) {for (int i = 0; i <this.balls.length; i ++) {g.setColor (balls [i] .color); // 각 볼의 좌표를 보자 --- (x 좌표) 볼 [i] .x = balls [i] .left? 볼 [i] .x-10 : 볼 [i] .x+10; // 공이 벽에 부딪 칠 때 볼의 방향을 바꾸면 (볼 [i] .x <= 0 || 볼 [i] .x> = this.getWidth () -24) {balls [i] .left =! balls [i] .left; // 각 볼의 좌표가 변경되도록하자. 공 [i] .y-10 : 공 [i] .y+10; // 공이 벽에 부딪 칠 때 볼의 방향을 바꾸면 (볼 [i] .y <= 0 || 볼 [i] .y> = this.getheight () -22) {balls [i] .up =! balls [i] .up; // switch Direction} g.filloval (balls [i] .x, balls [i]. 20, 20, 20, 20); }} @override public void ActionPerformed (ActionEvent e) {//system.out.println("aaa "); Repaint (); // 캔버스를 새로 고치십시오. Call Paint (Graphics G)} @override public void FocusteAded (Focusevent E) {Timer.stop (); } @override public void foccullost (focusevent e) {timer.restart (); } 개인 정적 클래스 볼 {int x, y; 부울 위로, 왼쪽; 색상; public ball (int x, int y, color color) {this.x = x; this.y = y; this.color = 색상; up = left = false; }}}위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.