我想知道如何在一个扩展JLabel的类中,将一个JLabel放在另一个JLabel上的特定位置上。以前人们曾在这方面寻求过帮助,但我发现的解决办法并不能让我满意。我正在使用GridLayout,下面是我的一些代码:
//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图标上使用坐标。
发布于 2013-12-06 05:53:42
以前人们曾在这方面寻求过帮助,但我发现的解决方案并不满足于我,因为他们要求我将框架布局设置为null,但我使用的是GridBagLayout。
这个框架使用的是GridBagLayout。
您要添加前台JLabel,所以是背景JLabel。背景标签可以使用您希望的任何布局(包括null)。
前景图片显示在背景的顶部,就在它的中间。
这是因为您使用的是BorderLayout并将前景添加到中心,当您不指定约束时,这是默认的。
https://stackoverflow.com/questions/20416930
复制相似问题