所以我一直在尝试自学Java(2D)游戏的基础知识。经过一个漫长而烦人的过程试图让图像显示出来后,我开始工作了。不幸的是,当我尝试添加第二张图片时,它取代了第一张图片。我知道我犯了一些明显的,noob错误,但是,嘿,我在这是一个菜鸟。无论如何,这是我的代码:
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Main extends JFrame {
public static void main(String[] args0) {
JFrame frame = new JFrame();
ImageIcon background = new ImageIcon("background.png");
JLabel backgroundLabel = new JLabel(background);
frame.add(backgroundLabel);
backgroundLabel.setVisible(true);
ImageIcon title = new ImageIcon("title.png");
JLabel titleLabel = new JLabel(title);
frame.add(titleLabel);
titleLabel.setVisible(false);
frame.setVisible(true);
frame.setTitle("Fastball");
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
}
}
当我运行它时,新添加的" title.png"部分覆盖第一个图像,替换它。请告诉我最简单的方法,通过简要解释我的错误来解决这个问题。
(P.S。我使用Eclipse Mars和最新的Java东西。)
答案 0 :(得分:3)
首先查看How to Use BorderLayout以了解问题发生的原因,然后查看Laying Out Components Within a Container了解可能的解决方案
linkTExt
您应该将JFrame frame = new JFrame();
//...
frame.setContentPane(backgroundLabel);
frame.setLayout(new GridBagLayout());
ImageIcon title = new ImageIcon("title.png");
JLabel titleLabel = new JLabel(title);
frame.add(titleLabel);
//...
添加到titleLabel
,但是您可以使用backgroundLabel
“欺骗”一点,您可以将JFrame
设置为“内容窗格” “对于框架,这意味着您添加到框架中的任何内容实际上都会添加到backgroundLabel
。
backgroundLabel
默认情况下没有应用布局管理,这意味着除非您应用一个布局管理,否则您添加到其中的任何内容都不会被调整大小或定位,并且会显示为“隐藏”JLabel
不使用布局管理器来计算它的首选大小,而是依赖于图像的大小及其文本。在大多数情况下,这可能不是问题,但如果您的内容由于某种原因超出图像的大小(水平或垂直),内容将被剪裁。您可以查看this example,其中显示了几种不同的方法来实现相同的结果