2012-05-04 5 views
0

私はJavaでゲームを作っています。私のゲームではpaintComponent()メソッドを呼び出すことができません。ここでのコードは次のとおりです。Javaペイントメソッドが呼び出されていない

public class TwinMoonTowers extends JPanel implements ActionListener{ 

    private class TMTMenu extends MouseAdapter{ 
     private Icon start, shop, quit; 
     private Icon main_bg; 

     public TMTMenu(){ 
      System.out.println("starting menu..."); 

      start = new Icon(TMTConstant.START_SOURCE, 
         TMTConstant.START_COORD_X, TMTConstant.START_COORD_Y); 

      shop = new Icon (TMTConstant.SHOP_SOURCE, 
         TMTConstant.SHOP_COORD_X, TMTConstant.SHOP_COORD_Y); 

      quit = new Icon (TMTConstant.EXIT_SOURCE, 
         TMTConstant.EXIT_COORD_X, TMTConstant.EXIT_COORD_Y); 

      main_bg = new Icon (TMTConstant.MAIN_MENU_BG, 0, 0); 
     } 

     @Override 
     public void mousePressed(MouseEvent me){ 

      int x = me.getX(); 
      int y = me.getY(); 

      System.out.println("coord: "+x+","+y); 

      if (me.getButton() == MouseEvent.BUTTON1){ 
       if (x > start.x && x < start.x + start.getIcon().getWidth(null) 
         && y > start.y && y < start.y + start.getIcon().getHeight(null)){ 
        curState = TMTConstant.MODE_STATE; 
       } 
       else if (x > quit.x && x < quit.x + quit.getIcon().getWidth(null) 
         && y > quit.y && y < quit.y + quit.getIcon().getHeight(null)){ 
        curState = TMTConstant.EXIT_STATE; 
       } 
       else if (x > shop.x && x < shop.x + shop.getIcon().getWidth(null) 
         && y > shop.y && y < shop.y + shop.getIcon().getHeight(null)){ 
        curState = TMTConstant.SHOP_STATE; 
       } 
      } 

     } 
    } 

    private class TMTModeSelector extends MouseAdapter{ 
     private Icon TwinTower, TripleTower, back; 

     public TMTModeSelector(){ 

     } 

     @Override 
     public void mousePressed(MouseEvent e){ 

     } 
    } 

    private String testDebug; 
    private int curState; 
    private TMTMenu menu; 

    public TwinMoonTowers(){ 
     menu = new TMTMenu(); 
     curState = TMTConstant.MAIN_MENU_STATE; 

     System.out.println("creating panel.."); 

     this.setVisible(true); 
     this.setDoubleBuffered(true); 
     this.setSize(TMTConstant.WINDOW_WIDTH, TMTConstant.WINDOW_HEIGHT); 
     this.addMouseListener(menu); 
    } 

    @Override 
    public void actionPerformed(ActionEvent arg0) { 
     // TODO Auto-generated method stub 
     this.repaint(); 

    } 
    @Override 
    public void paintComponent (Graphics g){ 
     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D) g; 

     System.out.println("preparing canvas.."); 

     switch(curState){ 
      case TMTConstant.MAIN_MENU_STATE : 
       g2d.drawImage(menu.main_bg.getIcon(), menu.main_bg.x, menu.main_bg.y, this); 
       g2d.drawImage(menu.start.getIcon(), menu.start.x, menu.start.y, null); 
       g2d.drawImage(menu.quit.getIcon(), menu.quit.x, menu.quit.y, null); 
       g2d.drawImage(menu.shop.getIcon(), menu.shop.x, menu.shop.y, null); 
       break; 
      case TMTConstant.GAME_STATE : 
       break; 
      case TMTConstant.SHOP_STATE : 
       break; 
      case TMTConstant.MODE_STATE : 
       break; 
     } 

     System.out.print("render image..."); 

     Toolkit.getDefaultToolkit().sync(); 
     g.dispose(); 

    } 
} 

クラスのアイコンは、このている間:

public class Icon{ 

private Image pic; 
public int x, y; 

public Icon (String path, int x, int y){ 

    ImageIcon ii = new ImageIcon (path); 
    pic = ii.getImage(); 

    this.x = x; 
    this.y = y; 
} 

public Image getIcon() {return pic;} 
} 

ここで基本的には3つのボタン(スタート、ショップ、終了)

しかし、paintComponentを含むメニューを描画することです方法(System.out.printlnはが表示されていない)と呼ばれていません

+0

ここではTMTConstantは何ですか? ... –

+0

TMTConstantはウィンドウの幅や高さなどの定数を持つクラスです – Jason

+0

@ShaikMdはあなたのコメントを通知しません(これは質問によく編集されています)コメントにスペースを入れないでください。 –

答えて

0
Toolkit.getDefaultToolkit().sync(); 
g.dispose(); 

これらの行は不要です(可能性があるとしても間違っている)、それらを削除します。

問題は、投稿したコードにはほとんどない可能性があります。トップレベルウィンドウ(フレーム/アプレット)にパネルを追加する場所はどこですか?コンテンツペインにはどのようなレイアウトを使用しますか?私の推測では、サイズは(0,0)なので、パネルはペイントされません。

+0

私はjframeにパネルを追加...しかし、私はレイアウトを設定していませんヌルレイアウト)。フレームのサイズは、パネルと同じです – Jason

+0

ここでは奇妙なものです。私のラップトップ画面を通過するまでフレームを移動するたびに、レンダリングが行われますが、ラップトップ画面で切り取られた部分のみ....あなたのソリューションを確認してコードを削除しましたが、それでも同じです – Jason

関連する問題