Eristikos Eristikos - 3 years ago 68
Java Question

how can i put a JButton on an image?

I am trying to fix a JFrame where there will be a background image and on the image JButtons which will do some commands. I try to do it without layout because i want to put small buttons in some specific locations on the JFrame but every time i do it, the background image comes to the front or the JFrame has size equal to the JFrame size. With the following code, the JButton has the same size to JFrame. I have tried to change the size and location of the JButton but nothing. Can you help me please?

here is the code


public final class Test extends JComponent
{
private Image background;
private JFrame frame;
private Dimension dimension;

public Test()
{
dimension = new Dimension(15, 15);
frame = new JFrame("Iphone");
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(this);
frame.setBounds(641, 0, 344, 655);
frame.setVisible(true);

test = displayButton("tigka");
frame.getContentPane().add(test);
}

public void update(Graphics g)
{
paint(g);
}


public void paintComponent(Graphics g)
{
super.paintComponents(g);
g.drawImage(background, 0, 25, null); // draw background


// label();

test = displayButton("test");
}

public JButton displayButton(String name)
{
JButton button = new JButton(name);

button.setSize(100, 100);
button.setPreferredSize(dimension);
return button;
}



Answer Source

You need to change the content pane to get a background for your Frame.

public static void main(String[] args) throws IOException {

    JFrame frame = new JFrame("Test");

    frame.setContentPane(new JPanel() {
        BufferedImage image = ImageIO.read(new URL("http://upload.wikimedia.org/wikipedia/en/2/24/Lenna.png"));
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, 300, 300, this);
        }
    });

    frame.add(new JButton("Test Button"));

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 300);
    frame.setVisible(true);
}

Output:

screenshot

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download