2017-09-22 1 views
0

Je travaille sur un projet et je viens de commencer l'interface graphique. Comme ce n'est pas mon sujet préféré, j'ai trébuché très vite sur quelque chose qui ne marchait pas bien. Tout (PacmanGrid, PacmanScore) est montré correctement mais les frontières j'ai écrit pour le panneau de PacmanScore! Quoi qu'il en soit, voici le code, espérons que quelqu'un peut vous aider.Le panneau n'a pas de bordure

public class PacmanFrame extends JFrame{ 



public PacmanFrame() { 
    this.setLayout(new BorderLayout()); 
    this.setTitle("Pacman"); 
    PacmanGrid p1=new PacmanGrid(); 
    PacmanScore p2 = new PacmanScore(); 


    this.add(p1,BorderLayout.CENTER); 
    this.add(p2,BorderLayout.EAST); 
    super.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    super.repaint(); 
    pack(); 
    super.setVisible(true); 


} 


public static void main(String[] args) { 
    PacmanFrame p1 = new PacmanFrame(); 
} 

} 

PacmanScore

public class PacmanScore extends JPanel{ 
private TitledBorder t3 = BorderFactory.createTitledBorder("Menu"); 
private Border etched = BorderFactory.createEtchedBorder(Color.WHITE, Color.white); 


public PacmanScore() { 
    setLayout(new FlowLayout()); 
    setPreferredSize(new Dimension(100,800)); 
    setBackground(Color.DARK_GRAY); 
    t3.setBorder(etched); 
    setBorder(t3); 

    setVisible(true); 
    setOpaque(true); 


} 

public void paint(Graphics g) { 
    Graphics2D g2 = (Graphics2D)g; 
    super.paintComponent(g2); 
    g2.setColor(Color.white); 
    g2.drawString("Score: ", 20, 400); 

} 

} 

PacmanGrid est également prolongé par un panneau et attire l'PacmanGrid classique en utilisant des modèles prédéfinis. Mais je ne pense pas que ce soit pertinent puisque le problème est clairement sur le panel de PacmanScore. Je posterai le code si quelqu'un en a besoin. Merci à l'avance!

Répondre

1
public void paint(Graphics g) { 
    Graphics2D g2 = (Graphics2D)g; 
    super.paintComponent(g2); 
    g2.setColor(Color.white); 
    g2.drawString("Score: ", 20, 400); 

} 

Vous n'avez pas remplacé la peinture() correctement parce que vous ne l'avez pas invoquez super.paint() et par conséquent la frontière n'est pas peint.

Ne pas surcharger la peinture(). La peinture personnalisée est effectuée en remplaçant paintComponent().

Lisez la section du tutoriel Swing sur A Closer Look at the Paint Mechanism pour plus d'informations. Pourquoi faites-vous même de la peinture personnalisée? Ajoutez simplement un JLabel au panneau.

De même, les composants Swing (à l'exception des fenêtres de niveau supérieur) sont visibles par défaut, il n'est donc pas nécessaire de rendre le panneau visible.

+0

Merci c'était ça! Merci beaucoup – Meli497