2011-01-08 9 views
3

Hier ist meine Leinwand-Klasse Einstellung JPanel erstreckt:Probleme mit JPanel der Farbe

package start; 

import java.awt.Color; 
import java.awt.Graphics; 
import javax.swing.JPanel; 

public class Board extends JPanel 
{ 
    private static final long serialVersionUID = 1L; 

    public Board() {} 

    public void paintComponent(Graphics g) 
    { 
     int width = getWidth(); 
     int height = getHeight(); 
     this.setBackground(Color.green); 

     g.setColor(Color.black); 
     g.drawOval(0, 0, width, height); 
    } 
} 

Hier ist die Methode, wo ich es bin Aufruf:

private static void createAndShowGUI() 
{ 

JFrame frame = new JFrame("Hello"); 
frame.setPreferredSize(new Dimension(700, 700)); 

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Board b = new Board(); 
frame.getContentPane().add(b); 

frame.pack(); 
frame.setVisible(true); 
} 

Aber dies zeigt das Oval auf der Standardfarbe. Ich versuchte auch ohne die this., und versuchte dann, die Farbe von b einzustellen und die Farbe innerhalb des Erbauers zu setzen, aber keiner von diesen arbeitete. Was ist los mit dir?

EDIT: Tut mir leid, dass ich kein klares Bild gemacht habe. Mein Ziel war es, ein dünnes schwarzes Oval auf grünem Hintergrund darzustellen.

+0

Vincent Ramdhanie ist richtig. Weitere Informationen finden Sie unter http://java.sun.com/products/jfc/tsc/articles/painting/ –

Antwort

2

In der paintComponent-Methode müssen Sie setBackground nicht verwenden, um die Farbe des JPanels zu ändern. Das sollte außerhalb von paintComponent erfolgen. paintComponent wird wahrscheinlich die Farbe des Hintergrunds verwenden, bevor Sie es ändern.

Es gibt eine Reihe von Dingen, die Sie ausprobieren können. Eines ist die Farbe in den Konstruktor zu setzen und rufen Sie dann die Super-Klasse paintcomponent zuerst wie folgt aus:

public Board() { 
     this.setBackground(Color.GREEN); 
    } 

    public void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
    int width = getWidth(); 
    int height = getHeight();   

    g.setColor(Color.BLACK); 
    g.drawOval(0, 0, width, height); 
} 

beachten Sie auch die Farbkonstanten sind alle Großbuchstaben. d.h. SCHWARZ oder GRÜN.

Wenn Sie die Hintergrundfarbe ändern mögen dynamisch dann können Sie dies in den Event-Handler wie mouseEntered oder actionPerformed usw.

0

Während der Code nicht genau klar machen, was ist Ihre Absicht, ich versuche, einige Probleme zu beheben :

Wenn Sie einen grünen Hintergrund möchten, tun Sie @vincent sagte Ihnen. Sie sollten ein schwarzes Oval im grünen Hintergrund sehen. Die "super.paintComponent" füllt ihren Bereich automatisch mit dem Hintergrund der Komponenten, wenn das Panel undurchsichtig ist.

Wenn Sie ein grünes Oval auf weißen Hintergrund wollen, vielleicht mit schwarzem Rande

public void paintComponent(Graphics g) 
{ 
    int width = getWidth(); 
    int height = getHeight(); 


    super.paintComponent(g); 
    g.setColor(Color.GREEN); 
    g.fillOval(0, 0, width, height); 
    g.setColor(Color.BLACK); 
    g.drawOval(0, 0, width, height); 
} 

EDIT

ich vergaß Super