web-dev-qa-db-fra.com

JPanel setBackground (Color.BLACK) ne fait rien

J'ai le JPanel personnalisé suivant et je l'ai ajouté à mon cadre en utilisant le générateur d'interface graphique Netbeans, mais l'arrière-plan ne changera pas! Je peux voir le cercle, dessiner avec g.fillOval (). Qu'est-ce qui ne va pas?

public class Board extends JPanel{

    private Player player;

    public Board(){
        setOpaque(false);
        setBackground(Color.BLACK);  
    }

    public void paintComponent(Graphics g){  
        super.paintComponent(g);
        g.setColor(Color.red);
        g.fillOval(player.getxCenter(), player.getyCenter(), player.getRadius(), player.getRadius());
    }

    public void updatePlayer(Player player){
        this.player=player;
    }
}
11
Primož Kralj

Si votre panneau n'est pas opaque (transparent), vous ne verrez pas votre couleur d'arrière-plan.

16
Stefan

Vous devez également appeler la super.paintComponent();, pour permettre à l'API Java de dessiner l'arrière-plan d'origine. Le super fait référence au code JPanel d'origine.

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

    g.setColor(Color.red);
    g.fillOval(player.getxCenter(), player.getyCenter(), player.getRadius(), player.getRadius());
}
15
Martijn Courteaux

Vous devez créer un nouvel objet Jpanel dans le constructeur Board. par exemple

public Board(){
    JPanel pane = new JPanel();
    pane.setBackground(Color.ORANGE);// sets the background to orange
} 
3
nig
setOpaque(false); 

CHANGÉ en

setOpaque(true);
3
Nilesh Jadav

Je viens d'essayer une implémentation à nu et cela fonctionne:

public class Test {

    public static void main(String[] args) {
            JFrame frame = new JFrame("Hello");
            frame.setPreferredSize(new Dimension(200, 200));
            frame.add(new Board());
            frame.pack();
            frame.setVisible(true);
    }
}

public class Board extends JPanel {

    private Player player = new Player();

    public Board(){
        setBackground(Color.BLACK);
    }

    public void paintComponent(Graphics g){  
        super.paintComponent(g);
        g.setColor(Color.red);
        g.fillOval(player.getCenter().x, player.getCenter().y,
             player.getRadius(), player.getRadius());
    } 
}

public class Player {

    private Point center = new Point(50, 50);

    public Point getCenter() {
        return center;
    }

    private int radius = 10;

    public int getRadius() {
        return radius;
    }
}
3
Torious