2013-01-17 120 views
0

我創建了一個JFrame並繪製矩形1x1的大小,每個矩形都是來自隨機生成器的RGB值的隨機顏色。當我運行代碼時,框架繪製所有的矩形,但幾秒鐘後,框架中的矩形會改變。Java JFrame繪製像素大小矩形

Rectangle類:

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Rectangle; 
import java.util.Random; 
import javax.swing.*; 
public class RandomRect extends JComponent 
{ 
    private static final long serialVersionUID = 1L; 
    public void paintComponent(Graphics g) 
    { 
     Random rand = new Random(); 
     Graphics2D g2 = (Graphics2D) g; 
     for(int y=1; y<601; y++) 
     { 
     for(int x=1; x<1201; x++) 
     { 
      float red = rand.nextFloat(); 
      float green = rand.nextFloat(); 
      float blue = rand.nextFloat(); 
      Color randomColor = new Color(red, green, blue); 
      Rectangle box = new Rectangle(x, y, 1, 1); 
      g2.setColor(randomColor); 
      g2.fill(box); 
     } 
     } 
     System.out.println("Finished draw"); 
    } 
} 

「說完抽獎」 被打印兩次。

的RectViewer類:

import java.awt.Color; 
import javax.swing.*; 
public class RectViewer 
{ 
    public static void main(String[] args) 
    { 
     JFrame frame = new JFrame(); 
     frame.setSize(1200,600); 
     frame.setTitle("Using the Rectangle Class"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setBackground(Color.white); 
     RandomRect rect = new RandomRect(); 
     frame.add(rect); 
     frame.setVisible(true); 
    } 
} 

我在一個println扔,看看它調用矩形類兩次,它是,但我不知道爲什麼!誰能幫忙?

+0

您可能會發現多次調用「paintComponent(Graphics)」。嘗試將矩形渲染爲圖像並將其顯示在標籤中。 –

回答

2

只要Swing決定需要重繪某些內容(例如窗口調整大小,取消最小化,發現窗口時)或顯式調用repaint(),paintComponent()方法就會被調用。因此,不要將初始化代碼放在paintComponent()中。順便說一句,不要把任何需要很長時間在paintComponent(),因爲所有你在那裏做的計算將會「丟失」

例如,您可以呈現矩形緩存BufferedImage(如安德魯湯普森建議)或者你可以將顏色保存在一個二維數組中。