【发布时间】:2025-12-10 04:25:01
【问题描述】:
我正在尝试用 Java 创建一个国际象棋界面,我正在使用 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。
-
创建框架、设置大小、添加面板、打包、设置可见。
-
“图片地址正确,但面板上没有显示。” 真的吗?试试这个实验。
String path = "pieces\\" + tabla[i][j] + ".png"; File f = new File(path); System.out.println("File exists: " + file.exists());。我会打赌打印出File exists: false(在你修正任何小错别字之后。这可能会阻止它编译).. -
@AndrewThompson 这对所有文件都是正确的,所以这不是问题......
标签: java swing jcomponent jlayeredpane