2013-05-18 5 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

Создайте рамку, установите размер, добавьте панель, пакет, установите. – arynaq

+0

* «Адреса изображений верны, но они не отображаются на панели.» * Действительно? Попробуйте этот эксперимент. 'String path =" pieces \\ "+ tabla [i] [j] +" .png "; Файл f = новый файл (путь); System.out.println («Файл существует:» + file.exists()); '. Я ** ставлю **, что печатает «Файл существует: false» (после устранения каких-либо мелких опечаток, которые могут помешать его компиляции). –

ответ

0

первый Используйте Layeredpane затем прикрепить две панели один для изображения и другая панель для компонентов и вторая панель должна быть Palete слой будет появляться то компоненты ..

 Смежные вопросы

  • Нет связанных вопросов^_^