2010-05-30 41 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); 
相关问题