java - 无法在 java 中的背景图像上添加内容

标签 java swing user-interface

我正在创建一个个人资料页面。在左侧,我向 jpanel 添加了一个包含背景图像的 jlabel。现在,在此面板上,我想为图标添加另一个 jlabel。然而,它并没有出现。请帮助我。

P.s:这只是代码的一部分

 public CustomerProfile()
 {
    super("Customer Profile");
    setLayout(new BorderLayout());

    //PROFILE DETAILS JPANEL
    jpProfile = new JPanel();
    add(jpProfile, BorderLayout.WEST);

    //BACKGROUND IMAGE OF THE PROFILE JPANEL
    ImageIcon background_img = new ImageIcon("background.jpg");
    Image img = background_img.getImage();
    Image tempImg = img.getScaledInstance(350, 600, Image.SCALE_SMOOTH);
    background_img = new ImageIcon(tempImg);
    background = new JLabel("",background_img,JLabel.CENTER);
    jpProfile.add(background);

    //PROFILE ICON
    ImageIcon profImg = new ImageIcon("female.png");
    jlProfileIcon = new JLabel();
    jlProfileIcon.setIcon(profImg);

    //ADDING PROFILE ICON TO JPANEL
    jpProfileIcon = new JPanel();
    jpProfileIcon.add(jlProfileIcon);

    //jpProfile.setOpaque(false);
    //jpProfileIcon.setOpaque(false);
    jpProfileIcon.add(jlProfileIcon);
    background.add(jpProfileIcon);




  }

最佳答案

默认情况下,只有 JPanel 使用布局管理器。

JLabel 不使用布局管理器,因此添加到标签的任何组件的大小/位置都不会更改。组件的默认大小为 (0, 0),因此无需绘制任何内容。

尝试:

background = new JLabel("",background_img,JLabel.CENTER);
background.setLayout( new BorderLayout() ); // added
…
background.add(jlProfileIcon);

不需要以下代码:

//jpProfileIcon = new JPanel();
//jpProfileIcon.add(jlProfileIcon);

也就是说,您不需要创建 JPanel,只需向其添加标签即可。

更好的选择是将背景图像绘制到面板上,然后您可以正常将标签添加到面板上。请参阅:Background Panel实现此功能的类。

关于java - 无法在 java 中的背景图像上添加内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60959313/

相关文章:

java - 最小化窗口的 JFrame.getLocationOnScreen()

java - 从另一个类中的方法创建 Action 监听器

java - getWidth() 对于面板返回 0

java - 按按钮更新 JList

c# - 将 XAML 事件订阅到不同 C# 文件中的事件处理程序

java - JNativeHook 在按键期间注册的按键次数多于所需次数

java - Libgdx : setting another screen, 但旧屏幕上的按钮仍处于 Activity 状态

Java - 锁定 JFrame 的纵横比

java - Java中随机访问文件中的新行

java - JTable 和 GUI 查询?