Java 如何在带有图像的覆盖布局上添加按钮

Java 如何在带有图像的覆盖布局上添加按钮,java,image,swing,overlay,Java,Image,Swing,Overlay,我想设置一个图像作为背景,以便在上面放置按钮,所以我使用了覆盖层。我只是想改变按钮的位置,把它们放在图片上方,但我找不到办法 public static void main(String[] args){ Menu program = new Menu(); SwingUtilities.invokeLater(program); } public void run() { JFrame frame = new JFrame () ; Get_size

我想设置一个图像作为背景,以便在上面放置按钮,所以我使用了覆盖层。我只是想改变按钮的位置,把它们放在图片上方,但我找不到办法

public static void main(String[] args){

    Menu program = new Menu();
    SwingUtilities.invokeLater(program);

}


public void run() {

    JFrame frame = new JFrame () ;
    Get_size get_size = new Get_size() ;
    get_size.Size_screen() ;
    int h = (int)height ;
    int w = (int) width;
    frame.setSize(w , h );

    JPanel panel = new JPanel();

    //Create the first  button
    JButton appointment = new JButton("Appointment menu & Diary");
    appointment.setPreferredSize(new Dimension(500,32));
    appointment.setFont(new Font("Algerian", Font.PLAIN , 24));
    panel.add(appointment) ;

    //Create the second  button
    JButton patient_profile = new JButton("Patient Profile");
    patient_profile.setPreferredSize(new Dimension(300, 32));
    patient_profile.setFont(new Font("Algerian", Font.PLAIN , 24));
    panel.add(patient_profile) ;


    JPanel over = new JPanel();
    LayoutManager overlay = new OverlayLayout(over);
    over.setLayout(overlay);

    JPanel imagen1 = new JPanel();
    ImageIcon image = new ImageIcon("menu.jpg") ;



    imagen1.add(new JLabel(image));

    over.add(imagen1);
    over.add(panel);
    frame.add(over);



    //sets the size of the frame
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //makes it so you can close
    frame.setVisible(true);

   // Set the frame of the size non-resizable
   frame.setResizable(false);
}

您必须定义布局。是否为空或框架布局或边框等

看看这里

Swing按添加组件的相反顺序绘制组件。因此,上面的代码将绘制面板,然后在面板顶部绘制图像,这样您将只看到图像

代码应颠倒:

over.add(panel);
over.add(imagen1);
现在,面板将绘制在图像的顶部。但是,由于面板是不透明的,您将看不到图像,因此您还需要将面板设置为非不透明:

JPanel panel = new JPanel();
panel.setOpaque(false);

一个技巧是使用自定义组件绘制图像(通过它的
paintComponent
方法),然后使用任何布局管理器来布局其余组件。查看(第二种方法是推荐的方法)另请参见。你能和我们分享这个图像吗?如果是这样,并且你没有足够的代表来嵌入图像,那么将其上传到图像共享站点并提供链接;获取大小获取大小=新建获取大小();获取大小。大小屏幕()。。框架设置尺寸(宽、高)try
JFrame=newjframe();setExtendedState(JFrame.MAXIMIZED_二者)
JPanel panel = new JPanel();
panel.setOpaque(false);