首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JLabel放在Java的JLabel之上

将JLabel放在Java的JLabel之上
EN

Stack Overflow用户
提问于 2013-12-06 05:48:37
回答 1查看 808关注 0票数 0

我想知道如何在一个扩展JLabel的类中,将一个JLabel放在另一个JLabel上的特定位置上。以前人们曾在这方面寻求过帮助,但我发现的解决办法并不能让我满意。我正在使用GridLayout,下面是我的一些代码:

代码语言:javascript
复制
//imports

public class Game extends JPanel implements MouseListener {

    Icon background = new ImageIcon(getClass().getResource("/background.jpg"));
    Icon foreground = new ImageIcon(getClass().getResource("/foreground.jpg"));
    JLabel backgr = new JLabel(background);
    JLabel foregr = new JLabel(foreground);
    JFrame frame = new JFrame("Game");

public Game() {
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridBagLayout());
        backgr.addMouseListener(this);

        frame.setLayout(new FlowLayout());
        frame.setPreferredSize(new Dimension(200,200));
        frame.pack();
        frame.setVisible(true);
        frame.addMouseListener(this);
        backgr.setLayout(new BorderLayout());
        frame.add(backgr);
        backgr.add(foreground);
    }
}

(在这个类中,我有很多其他的方法,比如一些鼠标的东西,但是我在这里不包括它们,因为它们与这个问题无关。)

目前,代码几乎按照我的要求工作,前景图片显示在背景的顶部,就在它的中间。但我希望前景图片显示在特定的坐标上的背景图片。我想,如果我想在坐标(50,50)处显示前景,我可以说是backgr.add(前台,50,50),这会编译,但在运行程序时返回一个错误。有什么建议吗?我会很感激的。

编辑:我发现,通过说backgr.setLayout(null)、backgr.add(foregr)和foregr.setLocation(50,50),我们可以做我想要的事情。但是,由于不鼓励使用布局管理器,所以我正在寻找更好的解决方案,这样我就可以在backgr图标上使用坐标。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-06 05:53:42

以前人们曾在这方面寻求过帮助,但我发现的解决方案并不满足于我,因为他们要求我将框架布局设置为null,但我使用的是GridBagLayout。

这个框架使用的是GridBagLayout。

您要添加前台JLabel,所以是背景JLabel。背景标签可以使用您希望的任何布局(包括null)。

前景图片显示在背景的顶部,就在它的中间。

这是因为您使用的是BorderLayout并将前景添加到中心,当您不指定约束时,这是默认的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20416930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档