1 回答
TA贡献1829条经验 获得超7个赞
问题:
public class Images extends JLabel{
private JLabel heads, tails;
public Images() {
heads = new JLabel(new ImageIcon("img/heads.png"));
tails = new JLabel(new ImageIcon("img/tails.png"));
add(heads);
add(tails);
}
}
JLabels 使用空布局,这意味着您的内部 JLabel 组件的大小将为 0, 0,并且图像 JLabel 本身将具有相同的首选大小,并且不会显示任何内容,因此您永远不想将 JLabel 添加到J标签。不要让图像扩展 JLabel,而是扩展 JPanel,并给它一个像样的布局,也许是 GridLayout。
例如。,
public class ImagePanel extends JPanel {
private JLabel headsLabel = new JLabel();
private JLabel tailsLabel = new JLabel();
public ImagePanel(Icon headsIcon, Icon tailsIcon) {
headsLabel.setIcon(headsIcon);
tailsLabel.setIcon(tailsIcon);
setLayout(new GridLayout(1, 0);
add(headsLabel);
add(tailsLabel);
}
}
再次,我建议将图像作为资源获取,而不是使用 ImageIO 读取的文件,例如
Image headImage = ImageIO.read(getClass().getResource(resourcePath));
Icon headIcon = new ImageIcon(headImage);
资源路径至关重要,并且取决于图像相对于类文件的位置。
添加回答
举报