在此範例中,我們將建立一個 Java 應用程序,在螢幕上繪製多個從框架邊緣彈起的球。
當嘗試繪製多個球時,它們會相互覆蓋,因為它們被添加到相同位置。
要解決此問題,我們需要:
這是實現這些變更的修改後的程式碼:
import java.awt.*; import javax.swing.*; import java.util.ArrayList; import java.util.List; public class Ball extends JPanel implements Runnable { List<Ball> balls = new ArrayList<Ball>(); Color color; int diameter; long delay; private int x; private int y; private int vx; private int vy; public Ball(String ballcolor, int xvelocity, int yvelocity) { if (ballcolor == "red") { color = Color.red; } else if (ballcolor == "blue") { color = Color.blue; } else if (ballcolor == "black") { color = Color.black; } else if (ballcolor == "cyan") { color = Color.cyan; } else if (ballcolor == "darkGray") { color = Color.darkGray; } else if (ballcolor == "gray") { color = Color.gray; } else if (ballcolor == "green") { color = Color.green; } else if (ballcolor == "yellow") { color = Color.yellow; } else if (ballcolor == "lightGray") { color = Color.lightGray; } else if (ballcolor == "magenta") { color = Color.magenta; } else if (ballcolor == "orange") { color = Color.orange; } else if (ballcolor == "pink") { color = Color.pink; } else if (ballcolor == "white") { color = Color.white; } diameter = 30; delay = 40; x = 1; y = 1; vx = xvelocity; vy = yvelocity; } protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; for (Ball ball : balls) { ball.paint(g2); } } public void run() { while (isVisible()) { try { Thread.sleep(delay); } catch (InterruptedException e) { System.out.println("interrupted"); } move(); repaint(); } } public void move() { for (Ball ball : balls) { int newX = ball.x + ball.vx; int newY = ball.y + ball.vy; if(newX + ball.diameter > getWidth()) { ball.vx *= -1; } if(newY + ball.diameter > getHeight()) { ball.vy *= -1; } if(newX < 0) { ball.vx *= -1; } if(newY < 0) { ball.vy *= -1; } ball.x = newX; ball.y = newY; } } private void start() { while (!isVisible()) { try { Thread.sleep(25); } catch (InterruptedException e) { System.exit(1); } } Thread thread = new Thread(this); thread.setPriority(Thread.NORM_PRIORITY); thread.start(); } public static void main(String[] args) { Ball ball1 = new Ball("red", 3, 2); Ball ball2 = new Ball("blue", 6, 2); JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.getContentPane().add(ball1); f.getContentPane().add(ball2); ball1.balls.add(ball1); ball2.balls.add(ball2); f.setSize(400,400); f.setLocation(200,200); f.setVisible(true); ball1.start(); ball2.start(); } }
在此更新的解決方案中:
按照以下步驟,我們就可以創建一個程序,成功在螢幕上繪製多個彈跳球。
以上是如何建立一個顯示多個彈跳球而不重疊的 Java 應用程式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!