2013-05-18 2 views
0

Java로 체스 인터페이스를 만들려고하고 JLayeredPane을 사용하여 내 체스 판 이미지 위에 조각을 놓습니다. 문제는 조각이 계층화 된 창에 추가되지 않는다는 것입니다.사용자 정의 JComponent가 JLayeredPane에 표시되지 않습니다.

이것은 내 DragImage 클래스의 코드입니다 (모든 조각은이 클래스의 인스턴스가되어 체스 보드에서 끌어다 놓을 수 있습니다).

class DragImage extends JComponent implements MouseMotionListener { 
     private static final long serialVersionUID = 1L; 
     int imageWidth = 52, imageHeight = 52; 
     int imageX, imageY; 
     Image img; 

     public DragImage(Image i) { 
      img = i; 
      repaint(); 
      addMouseMotionListener(this); 
     } 

     public void mouseDragged(MouseEvent e) { 
      imageX = e.getX(); 
      imageY = e.getY(); 
      repaint(); 
     } 

     public void mouseMoved(MouseEvent e) { 
     } 

     public void paint(Graphics g) { 
      Graphics2D g2 = (Graphics2D) g; 

      g2.drawImage(img, imageX, imageY, this); 
     } 

    } 

그리고 이것은 JPanel의 코드입니다.

이미지 주소는 정확하지만 패널에 나타나지 않습니다.

class MyPanel extends JPanel { 
     private JLayeredPane layeredPane; 
     private JLabel imageContainer = new JLabel(); 
     private ImageIcon img; 

     MyPanel() { 
      super(); 
      img = new ImageIcon("chessboard.png"); 
      this.imageContainer.setIcon(img); 
      this.layeredPane = new JLayeredPane(); 
      layeredPane.setPreferredSize(new Dimension(416, 416)); 
      layeredPane.add(imageContainer, 50); 
      imageContainer.setBounds(0, 0, img.getIconWidth(), 
        img.getIconHeight()); 
      int pozx = 52, pozy = 52; 
      for (int i = 0; i < 8; i++) { 
       for (int j = 0; j < 8; j++) { 
        if(tabla[i][j]!="--"){ 
        DragImage img = new DragImage(Toolkit.getDefaultToolkit().getImage("pieces\\" + tabla[i][j] + ".png")); 
        //System.out.println("pieces\\" + tabla[i][j] + ".png"); 
        img.setBounds(pozx,pozy,img.imageWidth,img.imageHeight); 
        layeredPane.add(img,100); //this doesn't work 
        } 
        pozx+=52; 
       } 
       pozy+=52; 
       pozx=52; 
      } 

      this.add(layeredPane); 
     } 
} 

...

frame = new JFrame(); 
frame.setVisible(true); 
frame.setSize(800, 600); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
panel = new MyPanel(); 
frame.add(panel); 
frame.pack(); 
+1

빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –

+0

프레임을 만들고 크기를 설정하고 panel, pack, setvisible을 추가하십시오. – arynaq

+0

* "이미지 주소는 정확하지만 패널에 표시되지 않습니다."* 정말입니까? 이 실험을 시도하십시오. 'String path = "pieces \\"+ tabla [i] [j] + ".png"; 파일 f = 새 파일 (경로); System.out.println ("파일 존재 :"+ file.exists());'. ** file ** : ** false ** (작은 오타를 수정 한 후에 그 파일이 컴파일되는 것을 막을 수 있습니다.) –

답변

0

제 사용의 layeredPane 다음 첨부 개의 패널 화상 용과 부품 다른 패널과 제 2 패널은 그 구성 요소가 나타날 것이다 palete 층이어야 ..