2012-05-04 2 views
0

자바로 게임을 만들고 내 게임에서 paintComponent() 메서드를 호출 할 수 없습니다. 의 paintComponent에 여기자바 페인트 메서드가 호출되지 않음

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 개 버튼 (시작, 상점, 출구)

을 포함하는 메뉴를 그릴 수 있지만 : 클래스 아이콘이 있습니다

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(); 

    } 
} 

동안 : 여기에 코드입니다 메서드가 호출되지 않음 (system.out.println이 표시되지 않음)

+0

여기에 TMTConstant는 무엇입니까 ?? ... –

+0

TMTConstant는 창 너비, 높이 등과 같이 상수가있는 클래스입니다. – Jason

+0

@ShaikMd는 '@ 그들의 이름'을 추가하지 않으면 @ 질문에 더 잘 편집 된 @ 주석이 통보되지 않습니다. (주석 없음). –

답변

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

이 줄은 필요하지 않습니다 잘못되었다), 제거하십시오.

문제는 게시 한 코드에없는 것 같습니다. 패널을 최상위 창 (프레임/애플릿)에 어디에 추가합니까? 컨텐트 영역에 어떤 레이아웃을 사용합니까? 내 생각 엔 크기가 (0,0)이므로 패널이 그려지지 않습니다.

+0

나는 jframe에 패널을 추가했다 ...하지만 아마 레이아웃을 설정하지 않았다. null 레이아웃). 프레임의 크기는 패널 – Jason

+0

과 동일합니다. 이상한 것이 있습니다. 내가 랩톱 화면을 통과 할 때까지 프레임을 움직일 때마다 렌더링되지만 ... 랩톱 화면으로 잘라낸 부분 만 .... 필자의 솔루션을 확인하고 코드를 제거했지만 여전히 동일합니다. – Jason

관련 문제