在jlabel背景上添加jpanel

时间:2016-02-14 07:06:51

标签: java swing jframe jlabel

我知道之前已经问过这个问题,但我似乎无法实现我的项目的任何其他答案。所以我在我的播放器类中有我的绘画方法。

public void paintComponent(Graphics g)
{
   //makes player(placeholder for real art)
   super.paintComponent(g);
   g.setColor(Color.GREEN);
   g.fillRect(x,y,50,30);
}

然后我在这里上了我的主要课程。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
/**
* Write a description of class Main here.
* 
* @author Richard Zins 
* @V01
*/
public class Main extends JFrame
{
    public static void main(String[]args)
    {
     Player p1 = new Player();
     Main m = new Main(p1);


     }

     public Main(Player p1)
     {
      JFrame ar = new JFrame();
      JLabel background = new JLabel(new ImageIcon("/Users/rizins/Desktop/PacManTestBackGround.jpg"));
      ar.setTitle("Runner Maze");
      ar.setSize(800,600); 
      ar.add(background);
      ar.setVisible(true);
      ar.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      ar.add(p1);
   }
}

现在我似乎无法让我的玩家对象在我的背景上画画,任何帮助都会受到赞赏!

3 个答案:

答案 0 :(得分:2)

有几个错误......

    默认情况下,
  1. JPanel是不透明的,因此您需要将其更改为透明
  2. JFrame默认使用BorderLayout,因此在(默认)中心位置只显示一个组件,在这种情况下,您添加的最后一个组件。
  3. 您最后应致电setVisible
  4. 相反,请为JLabel设置布局管理器,并将播放器类添加到其中。您应该将标签设置为框架的JLabel,而不是将contentPane添加到框架中,例如......

    p1.setOpaque(false);
    JFrame ar = new JFrame();
    ar.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JLabel background = new JLabel(new ImageIcon("/Users/rizins/Desktop/PacManTestBackGround.jpg"));
    ar.setTitle("Runner Maze");
    ar.setContentPane(background);
    ar.setLayout(new BorderLayout());
    ar.add(p1);
    ar.pack(); 
    ar.setVisible(true);
    

    我应该指出,使用JLabel来显示这样的背景图像可能会导致问题,因为JLabel仅使用文本和图标属性来计算其首选大小,这可能会导致一些儿童成分要超出其可见范围。

    有关详细信息和可能的解决方案,请参阅How to set a background picture in JPanel

答案 1 :(得分:0)

您可以通过将opaque设置为false来使JPanel透明。例如:




 <代码> panel.setOpaque(假)&#XA;  
&#XA;&#XA;

尝试如果这对你有用。

&#xA;

答案 2 :(得分:0)

使用Integer并在索引0处添加背景(使用int而不是JPanel编制索引)。然后你添加另一个不透明的{{1}}(比如@Bahramdun Adil的回答)并将你的播放器添加到那里。

通过这种方式,您可以拥有背景并同时显示您的播放器。