簡體   English   中英

Java-JFrame沒有顯示多張圖片

[英]Java - JFrame not showing more than one picture

因此,我一直在嘗試自學Java(2D)游戲的基礎知識。 經過漫長而煩人的嘗試來顯示圖像后,我開始工作了。 不幸的是,當我嘗試添加第二張圖像時,它替換了第一張。 我知道我犯了一些顯而易見的菜鳥錯誤,但是,嘿,我對此很菜鳥。 無論如何,這是我的代碼:

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”部分將覆蓋第一個圖像,並將其替換。 請告訴我最簡單的方法,並簡要說明我的錯誤。

(PS我正在使用Eclipse Mars和所有Java的最新版本。)

首先看一下如何使用BorderLayout來了解為什么會出現問題,然后再看一下在容器布置組件以獲取一些可能的解決方案

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默認情況下沒有應用布局管理,這意味着除非您應用一個布局管理,否則添加到其中的任何內容都將不會調整大小或位置,並且將顯示為“不可見”
  • JLabel不使用布局管理器來計算其首選大小,而是依賴於圖像和文本的大小。 在大多數情況下,這可能不是問題,但是如果您的內容由於某種原因超出了圖像的大小(水平或垂直),則內容將被剪切。 您可以看一下這個示例該示例顯示了幾種獲得相同結果的不同方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM