2016-04-29 13 views
6

私はJavaを教えるためにハンベマンゲームを作っています。私はフレームの本体に入っています。Java hangman game repaint()not working

private class PaintSurface extends JComponent { 
    Shape found = null; 

    public PaintSurface(){ 
     JOptionPane.showMessageDialog(null, "Repainting"); 
     Shape s; 
     msgbox("LL: " + intLivesLost); 
     switch(intLivesLost){ 
     //draw the Hanged man 
     case 10: 
      //Face + KILL 
     case 9: 
      //2nd Arm 
     case 8: 
      //1st Arm 
     case 7: 
      //2nd Leg 
     case 6: 
      //1st Leg 
     case 5: 
      //Body 
     case 4: 
      //Head 
      shapes.add(s); 
     case 3: 
      //Horizontal Bar 
      s = new Line2D.Float(100, 450, 250, 450); 
      shapes.add(s); 
      //Rope 
      s = new Line2D.Float(250, 450, 250, 500); 
      shapes.add(s); 
     case 2: 
      //Vertical Bar 
      s = new Line2D.Float(100, 450, 100, 670); 
      shapes.add(s); 
     case 1: 
      //Stand 
      s = new Line2D.Float(40, 670, 460, 670); 
      shapes.add(s); 
      break; 
     default: 
      break;   
     } 
    } 

    public void paint(Graphics g) { 
     Graphics2D g2 = (Graphics2D)g; 
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
       RenderingHints.VALUE_ANTIALIAS_ON); 
     g2.setStroke(new BasicStroke(4)); 
     g2.setColor(Color.BLACK); 

     for (Shape count : shapes){ 
      g2.draw(count); 
     } 
    } 
} 

そして、私が使用しています::

this.add(new PaintSurface(), BorderLayout.CENTER); 

私が持っている

repaint(); 

を...プロジェクト全体のフレームが更新されるたびに、新しい手紙を推測し、正しくありません新しいゲームを推測する。

アプリケーションが最初にJOptionPane.showMessageDialog(null、 "Repainting")を実行するとき。私はそれが呼び出されていることを知っているので、ポップアップ。その後、 "Repainting"ポップアップはもう表示されないので、私はrepaint()を知っています。コールは何もしていません。私は、コードがrepaint()に到達していることを知っています。私はJOptionPane.showMessageDialogを前後に配置しています。私は運を試してみた

のremoveAll();
revalidate();
getContentPane()。repaint();

これについてのヒントとヒントは非常に高く評価されます。

編集:「塗料」にコードを入れておいてこれを試してみましたが、これは以前のようでしたが、まだ動作していません。しかし、ありがとう。

+0

"public PaintSurface(){...}"は、PaintSurfaceクラスのコンストラクタです。 PaintSurfaceが "new PaintSurface()"で作成された場合にのみ呼び出されます。シェイプオブジェクトを作成するあなたのロジックは、どこか他の場所にあるはずです(おそらくペイントメソッドですが、私はこれが答えではないとは確信していません;)) –

答えて

0

私はそれを解決しました。別のパネルに図面を置いてください。それはうまくいきます。 助けてくれてありがとう。

1
  1. 必要に応じて塗料をオーバーライドしたり、paintComponentをオーバーライドしたり、更新したりしないでください。
  2. ペイント、塗り替え、更新メソッドの間に混乱があるようです。これを読んで:https://www.guiguan.net/repaint-paint-and-update/ゲームをしている場合、repaint()はコンポーネント全体の再描画を引き起こすため、パフォーマンス上の問題が発生します。