2010-02-21 62 views
0
import javax.swing.*; 
import java.awt.*; 

public class Fr extends JFrame{ 

    Fr(String s){ 
     super(s); 
     setSize(200,300); 
     setVisible(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public void paint(Graphics gr){ 
     gr=getGraphics(); 
     gr.fillRect(50, 50, 20, 20); 
    } 

    public static void main(String[] args){ 
     Fr f=new Fr("Window"); 
     f.getGraphics().setColor(JColorChooser.showDialog(null,"Color",null)); 
     f.getGraphics().fillRect(100,100,20,20); 
    } 
} 

它創建了一個窗口,方法「畫」畫第一矩形後創建的窗口顏色選擇,我選擇的顏色(紅色)和繪製的矩形第二...黑 爲什麼呢?奇怪的顏色+ +的Java JColorChooser的

回答

2

組件的繪製方法在swing確定需要重繪時調用。

因此,可能發生的情況是,只要創建並顯示框架,就會調用paint()。此時圖形顏色恰好是黑色的。

然後,設置顏色並在圖形對象上調用「drawRect」。沒有任何反應,因爲你不在繪畫方法中。在路上的某個點上,擺動決定了它需要重新繪製框架並使用新初始化的Graphics對象調用它的方法。它的顏色設置爲默認的黑色。你會得到另一個黑色的矩形。

解決方法是向Fr對象添加一個字段。例如,「rectangleColor」。你的JColorChooser應該更新這個字段。當Fr的paint被調用時,它應該引用這個屬性來設置圖形的顏色。

如果你想強制組件重繪自己,你應該調用它的repaint()方法。

最後,設置gr = getGraphics()沒有意義。你已經有一個初始化的Graphics對象在paint方法中傳遞給你了。

+0

謝謝,看來我理解 – 2010-02-21 19:19:18

1

您絕對不應該重寫JFrame的paint()方法。

從Swing教程Custom Painting中瞭解自定義繪畫的示例。

+0

好吧,我不KHOW,我會讀這個鏈接 謝謝 – 2010-02-21 20:41:47

0
import javax.swing.*; 
import java.awt.*; 


public class Fr extends JFrame{ 
    private static Color c=new Color(0,0,0,0); 
    Fr(String s){ 
     super(s); 
     setSize(200,300); 
     setVisible(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } 
     public void paint(Graphics gr){ 
      gr.fillRect(50, 50, 20, 20); 
      gr.setColor(c); 
      gr.fillRect(100,100,20,20); 
     } 
    public static void main(String[] args){ 
    Fr f=new Fr("Window"); 
    c=JColorChooser.showDialog(null,"Color",null); 
    f.repaint(); 
    } 
} 

感謝多倫多的傢伙=)