2013-07-31 2 views
3

Java 2D 구성 요소에 익숙해지기 위해 "페인트와 같은"응용 프로그램 (약간의 그리기 소프트웨어)을 사용하고 있습니다. 여기에 내 문제가있다 : ContentPane JPanel에서 상속하는 클래스의 인스턴스를 JFrame 있습니다. 배경색을 흰색으로 설정하려고하지만 기본 색상으로 유지됩니다 ... ContentPane에 해당하는 클래스 이름은 Container입니다.JPanel에서 Java의 배경색을 설정할 수 없습니다.

this.setContentPane(mainContainer); 

내가 뭔가를 놓친 적이 :

public class Container extends JPanel { 

    public Container() { 
     super(); 
     this.setBackground(Color.WHITE); 
    } 
} 

JFrame의 생성자가 라인을 포함 : 여기에 단순화 된 코드는?

Thx.

+0

을 : jFrame.setBackground을 (컬러 .WHITE); 그럼에도 불구하고, 왜 내 contentPane과 함께 작동하지 않는지 이해하고 싶습니다. 어떤 아이디어? Thx. – MarAja

답변

7

이 그것을 고칠 수 ...

public class Container extends JPanel 
{ 
    public Container() 
    { 
     super(); 
     this.setOpaque(true); 
     this.setBackground(Color.WHITE); 
    } 
} 
+0

나는 다음 줄을 가지고 있지만 여전히 작동하지 않습니다. .. – MarAja

+0

나는 또한 sa를 가지고있다. 나 문제! 나는 구체적으로 내 버튼을 클릭하고 색상을 바꿀 수 있기를 원하지만 전혀 작동하지 않는다. – frogeyedpeas

+0

나는 그것을 시도했지만 나에게도 효과가 없다. –

2

일부 구성 요소의 배경은 기본적으로 꺼져 있습니다. 배경색은 불투명 한 위젯에만 적용됩니다. 그 배경을 칠해야 위젯의 hierarchie의 모든 구성 요소에 대해 다음 메서드를 호출 :

c.setOpaque(true); 
+0

나는 그것을 시도했지만 그것은 나를 위해 작동하지 않습니다. –

0

을 나는 또한 그 문제가 있고, 해당 영업 이익이 제안 정확히 밖으로했다.

// Only this works for me 
this.setBackground(Color.blue); 
예를 들어 클래스의

전체 코드가 여기에있다 (나는/설정 setBackground의() 넣어 시도 곳 목적은 보여 단지에 대해, 나는 라인에 추가 할 때

import java.awt.BasicStroke; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import java.awt.geom.Ellipse2D; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class CircleDraw extends JFrame { 
    Float diameter = 150f; 

    public CircleDraw() { 
     super("Circle Draw"); 
     this.setSize(300, 300); 
     this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     this.add(new CirclePanel(diameter)); 
     this.setVisible(true); 

     // Only this works for me 
     this.setBackground(Color.blue); 
    } 

    public static void main(String[] args) { 
     new CircleDraw(); 
    } 
} 

class CirclePanel extends JPanel { 

    Float diameter; 

    public CirclePanel(Float diameter) { 
     super(); 
     // this.setOpaque(true); 
     // this.setBackground(Color.WHITE); 
     this.diameter = diameter; 
    } 

    @Override 
    public void paintComponent(Graphics g) { 

     int panelWidth = this.getSize().width; 
     int panelHeight = this.getSize().height; 

     setPreferredSize(new Dimension(300, 300)); 
     Graphics2D comp2D = (Graphics2D) g; 
     comp2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 

     comp2D.setStroke(new BasicStroke(1f)); 
     // comp2D.setBackground(Color.white); 
     comp2D.setPaint(Color.white); 

     Ellipse2D.Float e1 = new Ellipse2D.Float((panelWidth/2) - (diameter/2), (panelHeight/2) - (diameter/2), diameter, diameter); 
     comp2D.draw(e1); 
    } 
} 
+0

override 메소드의 super.paintComponent (g);에 호출을 추가하여 JPanel을 올바르게 페인트합니다. D – HelloImKevo

+0

그렇게 생각하면 작동하지 않습니다. 그 성명서를 정확히 어디에 넣으시겠습니까? –

+0

당신이 코드를 변경하는 경우 : '공공 CircleDraw() { // ... } 공공 정적 무효 메인 (문자열 []에 args) { 새로운 CircleDraw(); } public CirclePanel (플로트 직경) { super(); this.setOpaque (true); this.setBackground (Color.BLUE); this.diameter = diameter; } @Override public void paintComponent (Graphics g) { super.paintComponent (g); // ... } ' 의도 한대로 작동해야합니다. 파란색 패널과 흰색 원 (의도를 정확히 이해하고있는 경우) – HelloImKevo

관련 문제