java - 其他面板的背景图片问题

标签 java image swing background-image jlabel

所以我为纸牌游戏 war 创建了一个程序。一切都完成了,除了我想添加背景。问题是我不知道如何添加背景图片,以便其他 JLabels 和 JButton 仍然出现在图片的顶部。有没有为我设置背景图片以便其他面板也显示在顶部的?到目前为止我的程序是这样的:

public War()
{
    JFrame frame = new JFrame();

    frame.setSize(500, 500);
    frame.setTitle("WAR");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new BorderLayout());

    //Set up for background image
    Background = new JPanel();
    Background.add(new Background("Background.png"));
    frame.add(Background);
    Background.setLayout(new OverlayLayout(Background));

    cardPanel = new JPanel (new GridLayout(2,1));
    ///create labels and init with card back
    String strCard1 = "cardback.png";
    String strCard2 = "cardback.png";
    lblPlayer1Card = new JLabel(new ImageIcon(strCard1));
    lblPlayer2Card = new JLabel(new ImageIcon(strCard2));
    cardPanel.add(lblPlayer1Card);
    cardPanel.add(lblPlayer2Card);

    //Create panels for when war is played
    warPanel = new JPanel (new GridLayout(2, 3));
    String emptycards = "blankcard.png";
    player1war1 = new JLabel(new ImageIcon(emptycards));
    player1war2 = new JLabel(new ImageIcon(emptycards));
    player1war3 = new JLabel(new ImageIcon(emptycards));
    player2war1 = new JLabel(new ImageIcon(emptycards));
    player2war2 = new JLabel(new ImageIcon(emptycards));
    player2war3 = new JLabel(new ImageIcon(emptycards));
    warPanel.add(player1war1);
    warPanel.add(player1war2);
    warPanel.add(player1war3);
    warPanel.add(player2war1);
    warPanel.add(player2war2);
    warPanel.add(player2war3);


    // Create a panel
    btnPanel = new JPanel(new GridLayout(2,2));
    //set up next card button
    JButton btnNext = new JButton("Next Card");
    NextListener listener1 = new NextListener();
    btnNext.addActionListener(listener1);
    //set up new game button
    JButton btnNewGame = new JButton("New Game");
    NewGameListener listener2 = new NewGameListener();
    btnNewGame.addActionListener(listener2);


    //Sets up new panel showing size of main pile and discard pile of both players
    statusPanel = new JPanel(new GridLayout(4,2));

    //status labels that show the size of piles
    status1 = new JLabel("");// Size of player 1's main pile
    status2 = new JLabel("");//Size of player 1's discard pile
    status3 = new JLabel("");//Size of player 2's main pile
    status4 = new JLabel("");//Size of player 2's discard pile
    statusWar = new JLabel("");//Status label that shows the winner of War
    statusEmpty1 = new JLabel(""); // Creates empty status to put space between War status and size statuses
    statusEmpty2 = new JLabel(""); // Creates empty status to put space between War status and size statuses

    statusBar = new JLabel("");

    //Adds the labels to the panels
    btnPanel.add(btnNext);
    btnPanel.add(btnNewGame);
    btnPanel.add(statusBar);
    statusPanel.add(status1);
    statusPanel.add(status2);
    statusPanel.add(status3);
    statusPanel.add(status4);
    statusPanel.add(statusEmpty1);
    statusPanel.add(statusEmpty2);
    statusPanel.add(statusWar);

    cardPanel.setOpaque(false);
    btnPanel.setOpaque(false);
    statusPanel.setOpaque(false);
    warPanel.setOpaque(false);

    //The layout of the frame
    Background.add(cardPanel, BorderLayout.WEST);
    Background.add(btnPanel, BorderLayout.SOUTH);
    Background.add(statusPanel, BorderLayout.NORTH);
    Background.add(warPanel, BorderLayout.EAST);

    frame.setVisible(true);
}

最佳答案

为您自己创建一个JLabel。加载图像并将其应用到标签 (JLabel#setIcon)。

将标签布局管理器设置为您需要的。像平常一样将其他组件添加到标签中。

将标签添加到框架。

看看

举例

关于java - 其他面板的背景图片问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13943810/

相关文章:

java - 任何人都可以解释 Selenium 中的屏幕截图吗?

cocoa - 加载本地化的 UIImage

html - 响应式定位图标

html - 我的图像链接后面显示红色 block

java - 将 JComboBox 添加到 JTable 单元格

java - JWindow的窗口不动

java - netty 4.x.x 中的 UDP 广播

java - 查找 "+some text except + "@+some text+news 格式的正则表达式

java - 尽管从命令提示符下运行完美,但双击后 jar 文件无法打开

java - 当我尝试将两个 (.txt) 文件合并到另一个 (.txt) 文件中时,为什么我的代码不起作用?