我是新来的 我需要使用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);
}
}
答案 0 :(得分:0)
public class backgroundImage extends JFrame{
类名应以大写字母开头
add(imageLabel);
imageLabel.add(btn,BorderLayout.SOUTH);
validate();
与JPanel不同,JLabel并非设计为用来容纳其他组件的“容器”,因此它没有默认的布局管理器,因此您不能仅使用BorderLayout将组件添加到其中约束。
不需要validate()方法。在将框架添加到面板后,将组件添加到面板中时,才使用revalidate()和repaint()。
因此您的代码应类似于:
add(imageLabel);
imageLabel.setLayout( new BorderLayout() );
imageLabel.add(btn,BorderLayout.SOUTH);
//validate();
请注意,仅当您添加到标签的组件小于图像的大小时,此方法才有效,否则,该组件将被截断以适合标签区域。
签出Background Panel以获得更灵活的解决方案。