2010-05-30 13 views
3

색과 배경색을 변경하기 위해 메뉴 단추로 색칠 된 '눈'을 표시하는 작업이 있습니다. 다음에 그들을 움직입니다. 하지만 현재 저는 페인팅에 빠져 있습니다. JFrame을 작성했습니다. JPanel에는 그려진 눈과 버튼이있는 패널이 포함되어 있습니다. 버튼은 제대로 렌더링되지만 내 눈은 캔버스가 표시되지 않습니다. 나는 paintContent를 다르게 설정하면서 paintComponent로 페인트를 변경하려고 시도했지만 아무런 효과가 없다. 내가 JFrame의에 직접 그림을 시도했습니다 때 alt text http://img132.imageshack.us/img132/827/eyes2i.jpg다른 구성 요소 내부의 구성 요소를 페인팅

이 떨어져 배경의 설정되지 않은, 거의 완벽하게 작동합니다 alt text http://img175.imageshack.us/img175/6420/eyes1.jpg 이 내가 무엇을 가지고 :

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); 
    } 
} 

내가 가야 무엇인가 . 왜 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

및 배경 설정이 작동하지 않는 이유를 알 수 있습니까 :

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

가되어야 하는가? –

+0

확인, 문서에서 직접 발견했습니다. –

+0

Java doc : "Graphics2D 컨텍스트에서 배경색을 설정하면 이후의 clearRect 호출에만 영향을 미치고 Component의 배경색에는 영향을 미치지 않습니다. 구성 요소의 배경을 변경하려면 해당 구성 요소의 적절한 방법을 사용하십시오." –

1

회화 코드 가 올바르지 않습니다 :

public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
관련 문제