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();
빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –
프레임을 만들고 크기를 설정하고 panel, pack, setvisible을 추가하십시오. – arynaq
* "이미지 주소는 정확하지만 패널에 표시되지 않습니다."* 정말입니까? 이 실험을 시도하십시오. 'String path = "pieces \\"+ tabla [i] [j] + ".png"; 파일 f = 새 파일 (경로); System.out.println ("파일 존재 :"+ file.exists());'. ** file ** : ** false ** (작은 오타를 수정 한 후에 그 파일이 컴파일되는 것을 막을 수 있습니다.) –