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;
}
}
Si votre panneau n'est pas opaque (transparent), vous ne verrez pas votre couleur d'arrière-plan.
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());
}
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
}
setOpaque(false);
CHANGÉ en
setOpaque(true);
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;
}
}