2017-09-22 1 views
0

Ich arbeite an einem Projekt und ich habe gerade auf der GUI gestartet. Da dies nicht mein Lieblingsthema ist, stolperte ich sehr schnell über etwas, das nicht ganz richtig funktionierte. Alles (PacmanGrid, PacmanScore) wird korrekt angezeigt, aber die Grenzen, die ich für das PacmanScore Panel geschrieben habe! Wie auch immer, hier ist der Code, hoffe jemand kann helfen.Panel hat keine Grenze

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 wird auch durch ein Gremium erweitert und zieht die klassische PacmanGrid vordefinierten Mustern. Aber ich denke nicht, dass es relevant ist, da das Problem eindeutig im PacmanScore-Panel liegt. Ich werde den Code veröffentlichen, wenn jemand das braucht. Vielen Dank im Voraus!

Antwort

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

} 

Sie nicht außer Kraft setzen paint() richtig, weil Sie nicht super.paint geltend gemacht hat(), und daher wird die Grenze nicht lackiert.

Farbe nicht überschreiben(). Benutzerdefinierte Malerei erfolgt durch Überschreiben paintComponent().

Lesen Sie den Abschnitt aus dem Swing-Tutorial auf A Closer Look at the Paint Mechanism für weitere Informationen.

Warum machst du sogar benutzerdefinierte Malerei? Fügen Sie einfach ein JLabel zum Panel hinzu.

Auch Swing-Komponenten (mit Ausnahme von Top-Level-Fenstern) sind standardmäßig sichtbar, so dass das Panel nicht sichtbar ist.

+0

Danke das war es! Ich danke dir sehr – Meli497