栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JLabel在另一个JLabel上不起作用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JLabel在另一个JLabel上不起作用

一种选择

不要使用组件(即JLabels)创建游戏环境。相反,您可以绘制所有游戏对象。

例如,如果您正在执行以下操作:

JLabel[][] labelGrid = JLabel[][];...ImageIcon icon = new ImageIcon(...);JLabel label = new JLabel(icon);...for(... ; ... ; ...) {   container.add(label);}

相反,您可以一起去除所有标签,也可以使用

Images
代替
ImageIcons
,然后可以将所有图像绘制到单个组件表面上。也许像这样:

public class GamePanel extends JPanel {    Image[][] images = new Image[size][size];    // init images    @Override    protected void paintComponent(Graphics g) {        super.paintComponent(g);        g.drawImage(image,);    }  }
  • Grapchics.drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)

因此,要解决位置问题(即x和y,哦以及大小),我们可以使用一些好的旧的OOP抽象。创建一个包装图像,位置和尺寸的类。例如

class LocatedImage {    private Image image;    private int x, y, width, height;    private ImageObserver observer;    public LocatedImage(Image image, int x, int y, int width,     int height, ImageObserver observer) {        this.image = image;        ...    }    public void draw(Graphics2D g2d) {        g2d.drawImage(image, x, y, width, height, observer);    }}

然后,您可以在面板中使用一堆此类的实例。就像是

public class GamePanel extends JPanel {    List<LocatedImage> imagesToDraw;    // init images    // e.g. imagesToDraw.add(new LocatedImage(img, 20, 20, 100, 100, this));    @Override    protected void paintComponent(Graphics g) {        super.paintComponent(g);        Graphics2D g2d = (Graphics2D)g.create();        for (LocatedImage image: imagesToDraw) { image.draw(g2d);        }        g2d.dispose();    }  }

一旦有了这个概念,就有很多不同的可能性。

  • 请参阅“执行自定义绘画”,以获取有关绘画的一些一般性想法。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470455.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号