如何将JComponents放置在Jframe背景图像上?,

时间:2018-11-12 21:13:27

标签: java image swing jframe

我是新来的 我需要使用BorderLayout将组件放置在Jframe中的背景图像上的帮助。 我尝试将组件添加到标签上,然后将标签添加到框架上,但到目前为止还没有成功

这是我的代码:

package com.hosp;

import javax.swing.*;
import java.awt.*;

public class BackgroundImage extends JFrame {

    BackgroundImage() {

        //get  image from package
        ImageIcon img=new ImageIcon(getClass().getResource("backgroundimage.jpg"));

        //add image to Label
        JLabel imageLabel =new JLabel(img,JLabel.CENTER);

        //button on screen
        JButton btn =new JButton("Save");

        //
        add(imageLabel);
        imageLabel.add(btn,BorderLayout.SOUTH);

        }

    public static void main(String []args) {

        BackgroundImage frame = new BackgroundImage ();
        frame.setVisible(true);
        frame.setSize(300,300);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

1 个答案:

答案 0 :(得分:0)

public class backgroundImage extends        JFrame{ 

类名应以大写字母开头

add(imageLabel);
imageLabel.add(btn,BorderLayout.SOUTH);
validate();
  1. 与JPanel不同,JLabel并非设计为用来容纳其他组件的“容器”,因此它没有默认的布局管理器,因此您不能仅使用BorderLayout将组件添加到其中约束。

  2. 不需要validate()方法。在将框架添加到面板后,将组件添加到面板中时,才使用revalidate()和repaint()。

因此您的代码应类似于:

add(imageLabel);
imageLabel.setLayout( new BorderLayout() );
imageLabel.add(btn,BorderLayout.SOUTH);
//validate();

请注意,仅当您添加到标签的组件小于图像的大小时,此方法才有效,否则,该组件将被截断以适合标签区域。

签出Background Panel以获得更灵活的解决方案。