2017-09-22 12 views
0

私はプロジェクトで作業しています。これは私の最も好きな話題ではないので、私はかなりうまく動作していないものを実際に素早く見つけました。すべて(PacmanGrid、PacmanScore)は正しく表示されますが、私がPacmanScore Panel用に書きました!とにかくここにコードは、誰かが助けることを願っています。パネルには枠線がありません

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もパネルによって拡張し、予め定義されたパターンを使用して古典的なPacmanGridを描画されます。しかし、問題は明らかにPacmanScore Panel上にあるので、それは関連性があるとは思わない。もし誰かがそれを必要とすれば私はコードを掲示するでしょう。 ありがとうございました!

答えて

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

} 

super.paint()を呼び出していないため、境界線がペイントされていないため、paint()を適切にオーバーライドしませんでした。

paint()をオーバーライドしないでください。カスタムペインティングはpaintComponent()を上書きして行います。

詳細については、A Closer Look at the Paint MechanismのSwingチュートリアルのセクションを参照してください。

なぜあなたはカスタムペインティングをしていますか?パネルにJLabelを追加するだけです。

また、スイングコンポーネント(トップレベルウィンドウを除く)はデフォルトで表示されるため、パネルを表示する必要はありません。

+0

ありがとうございました!どうもありがとうございます – Meli497

関連する問題