how to add a buffered image as back ground of JFra

2019-01-20 20:12发布

This question already has an answer here:

I'm in the second term of Computer engineering .

my problem is how to add JButton etc... on the background image ,you know I have written the below code , please help me to continue: as I said my JBotton can't be shown on the image and here is the problem.

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class MyCalcFrame extends JFrame
{
    private BufferedImage myImage;
    private JPanel mypanel;
    private JButton mybtn;

    public MyCalcFrame()
    {
        this.setBounds(410, 110, 600, 450);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.setResizable(false);
        this.setAlwaysOnTop(true);



        try
        {
            this.myImage=ImageIO.read(new File("D:\\1.jpg"));
        }//end try
        catch(IOException e)
        {
            JOptionPane.showMessageDialog(null, "Image dose not exist.","NO Image found",JOptionPane.ERROR_MESSAGE);
        }//end catch
        this.mypanel=new JPanel();
        this.mypanel.setBackground(Color.black);
        this.setContentPane(new ImagePanel(myImage));
        mybtn=new JButton("hello");
        this.getContentPane().add(mybtn);

        this.setVisible(true);
    }//end MyCalcFrame constructor

    class ImagePanel extends JComponent 
    {
        private Image image;

        public ImagePanel(Image image)
        {
            this.image = image;
        }//end constructor
        @Override
        protected void paintComponent(Graphics g)
        {
            g.drawImage(image, 0, 0, null);
        }//en paintComponent
    }//end ImagePanel
    //################ End constructor ########################
    //public void paint(Graphics g)
    //{
    //  g.drawImage(myImage, 0, 0, this);
    //}//end method paint

    //@@@@@@@@@@@@@@@@@@@@@@@@ main @@@@@@@@@@@@@@@@@@@@@@@@@@@@
    public static void main(String[] args)
    {
        //JFrame.setDefaultLookAndFeelDecorated(true);
        new MyCalcFrame();
    }//end method main
    //@@@@@@@@@@@@@@@@@@@@@@@@ main @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
}//end class MyCalcFrame

1条回答
Juvenile、少年°
2楼-- · 2019-01-20 20:42

A JComponent doesn't use a Layout Manager so when you add the button it doesn't display.

Try using a FlowLayout on your component.

Also, don't use setBounds() for your frame. You should pack() and then use setLocationByPlatform(true), so the frame is displayed at its preferred size.

You would need to implement getPreferredSize() for your component so this works.

查看更多
登录 后发表回答