2010-05-30 52 views
3

我有一個任務,通過菜單按鈕顯示塗色的「眼睛」,以更改它們的顏色和背景顏色。接下來製作它們。但目前我被困在繪畫,sinc在我的JFrame中我創建了JPanel,包含繪製眼睛和按鈕的面板。按鈕呈現正常,但我的眼睛畫布不顯示。我嘗試將paint改爲paintComponent,以不同的方式設置contentPane,但仍然沒有任何效果。在另一個組件內部繪畫組件

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

public class Main extends JFrame { 

    public static void main(String[] args) { 
     final JFrame frame = new JFrame("Eyes"); 
     frame.setPreferredSize(new Dimension(600, 450)); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel players = new JPanel(new GridLayout(1, 3)); 
       players.add(new JButton("Eyes color")); 
       players.add(new JButton("Eye pupil")); 
       players.add(new JButton("Background color")); 

     JPanel eyes = new JPanel(); 
     Eyes e = new Eyes(); 
     eyes.add(e); 
     eyes.setPreferredSize(new Dimension(600, 400)); 

     JPanel content = new JPanel(); 
     content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); 
     frame.setContentPane(content); 
     content.add(players); 
     content.add(eyes); 

//  frame.getContentPane().add(content); 
     frame.pack(); 
    frame.setVisible(true); 

    } 
} 

class Eyes extends JPanel { 

    public Eyes(){  
    } 

    public void paint(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 
     BasicStroke bs = new BasicStroke(3.0f); 
     g2d.setBackground(Color.green); 
     g2d.setStroke(bs); 
     g2d.setColor(Color.yellow); 
     g2d.fillOval(50, 150, 200, 200); 
     g2d.fillOval(350, 150, 200, 200); 
     g2d.setColor(Color.BLACK); 
     g2d.drawOval(49, 149, 201, 201); 
     g2d.drawOval(349, 149, 201, 201); 
     g2d.fillOval(125, 225, 50, 50); 
     g2d.fillOval(425, 225, 50, 50); 
    } 
} 

這是我應該得到什麼: alt text http://img175.imageshack.us/img175/6420/eyes1.jpg 這是我有: alt text http://img132.imageshack.us/img132/827/eyes2i.jpg

當我試圖直接畫它的JFrame它的作品幾乎是完美的,除了背景的未設置。爲什麼setBackgroundColor不會以任何方式影響我的繪圖?

回答

3

Eyes類已經是面板了。你不需要這種額外的面板:JPanel eyes = new JPanel();

使它像這樣:

Eyes eyes = new Eyes(); 
eyes.setPreferredSize(new Dimension(600, 400)); 

JPanel content = new JPanel(); 
content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); 
frame.setContentPane(content); 
content.add(players); 
content.add(eyes); 

你也可以將它與你的其他面板工作。只需設置e面板的首選尺寸。

JPanel eyes = new JPanel(); 
Eyes e = new Eyes(); 
eyes.add(e); 
e.setPreferredSize(new Dimension(600, 400)); 
eyes.setPreferredSize(new Dimension(600, 400)); 
+0

?你知道爲什麼背景設定不工作? – 2010-05-30 11:12:20

+0

好的,在文檔中發現它自己。 – 2010-05-30 11:15:51

+0

來自Java文檔:「在Graphics2D上下文中設置背景顏色只會影響後續clearRect調用,而不會影響組件的背景顏色。要更改組件的背景,請使用Component的適當方法。」 – 2010-05-30 11:16:39

1

繪圖代碼在你的眼中面板是不正確的:

public void paint(Graphics g) { 
     super.paintComponent(g); 

應該是:

public void paintComponent(Graphics g) { 
     super.paintComponent(g);