JPanel posicionado incorrectamente

He creado un juego en Java, donde se supone que debes adivinar un int generado aleatoriamente, entre 1-100. Si adivina demasiado bajo, un campo de texto se rellenará con un texto que dice "demasiado bajo" pero en sueco. Lo mismo si adivinas demasiado alto.

El problema ocurre cuando la respuesta es correcta, luego llamo a un método para hacer visible un JPanel invisible. Eso funciona bien, pero el Jpanel en sí no se moverá a la cima donde se supone que debe estar. Y tiene que encajar perfectamente, ya que es solo una imagen photoshopeada del fondo. Las propiedades de laantecedentes es: 1920 x 1080. Las propiedades de laphotoshopped GG WP es 1920 x 297. El Jpane se llama "grattis"

Espero que no me haya perdido algo importante y agradezco toda la ayuda que puedo obtener, porque estoy atrapado ahora.

PD. Perdón por el mal inglés y el formato.

package slumpatal;

import java.util.Random;

//This class runs the program, the main method is here.
public class SlumpaTal extends callback1 {
    private int randomTal;
    Random random = new Random();

    @Override
    public int SetValue(int value) {
        if (value < randomTal)
            return -1;
        else if (value == randomTal)
            return 0;
        else
            return 1;

    }

    //private JFrame1 frame;
    SlumpaTal() {
        GenerateRandomNumber();
        JFrame1.createWindow(this);
    }

    public void GenerateRandomNumber() {
        randomTal = random.nextInt(100) + 1;
    }

    public static void main(String[] args) {
        new SlumpaTal();
    }
}

.

package slumpatal;


import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;


public class JFrame1 {
    //public  static int dittSvar;
    public static void createWindow(callback1 callbackArg) {

        //Font font = new Font("Verdana", Font.BOLD,28);

        JFrame frame = new JFrame("Gissa ett Tal mellan 1-100");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setOpaque(true);
        contentPane.setBorder(BorderFactory.createMatteBorder(5, 5, 5, 5, Color.WHITE));
        contentPane.setBackground(Color.WHITE);
        contentPane.setLayout(new BorderLayout(10, 10));

        ImagePanel imagePanel = new ImagePanel(callbackArg);


        //frame properties


        contentPane.add(imagePanel, BorderLayout.CENTER);
        frame.setContentPane(contentPane);
        frame.setSize(1000, 600);
        frame.setVisible(true);
    }
}


class ImagePanel extends JPanel

{
    callback1 callback;
    public int dittSvar;
    private BufferedImage image;
    JButton restartApp;
    JTextField dittSvarText1;
    JTextField dittRes1;
    BufferedImage myPicture;
    public JPanel grattis;

    public ImagePanel(callback1 callbackArg) {
        try {
            myPicture = ImageIO.read(new URL("https://imagizer.imageshack.us/v2/1375x213q90/843/r7f8.jpg"));
        } catch (Exception ex) {
            System.err.print("No reward image");
        }
        callback = callbackArg;
        setOpaque(true);
        setBorder(BorderFactory.createLineBorder(Color.BLACK, 5));
        try {
            image = ImageIO.read(new URL("http://imageshack.com/a/img835/193/v8k3.jpg"));
        }
        //If it doesn't work, write an error message, printStackTrace.
        catch (IOException e) {
            System.err.printf("%s", e.toString());
            e.printStackTrace();
        }
        createGUI();
        createGUI2();

        dittSvarText1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dittSvar = Integer.parseInt(dittSvarText1.getText());
                int res = callback.SetValue(dittSvar);
                if (res < 0)
                    dittRes1.setText("För lågt");
                else if (res == 0) {
                    dittRes1.setText("Rätt Svar!!!!");
                    makeItVisible();
                } else
                    dittRes1.setText("För Högt");
                dittSvarText1.setText("");
            }
        });
        restartApp.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                callback.GenerateRandomNumber();
                dittSvarText1.setText(null);
                dittRes1.setText(null);
                grattis.setVisible(false);

            }
        });
    }

    public void makeItVisible() {
        System.out.print("Showing reward image");
        grattis = new JPanel();
        grattis.setOpaque(false);
        grattis.setLayout(new FlowLayout(FlowLayout.LEFT));


        if (myPicture != null) {
            JLabel picLabel = new JLabel(new ImageIcon(myPicture));

            //picLabel.setLocation(new Point(0,0));
            picLabel.setLocation(new Point(0, 0));
            // picLabel.setSize(1000,297);
            // grattis.setLocation(0, 0);
            picLabel.setVerticalAlignment(WIDTH);
            grattis.setVisible(true);
            grattis.setSize(1000, 600);

            grattis.add(picLabel);
            add(grattis);
            updateUI();
        } else {
            System.err.print("No picture created!");
        }


    }

    public void createGUI() {
        setLayout(new GridBagLayout());
        JPanel panel1 = new JPanel();

        panel1.setOpaque(false);
        panel1.setLayout(new GridLayout(2, 2, 2, 2));
        JLabel skrivdingissning = new JLabel("Skriv din gissning här : ");
        skrivdingissning.setForeground(Color.WHITE);
        dittSvarText1 = new JTextField(10);
        JLabel VadBlevDet = new JLabel("Vad blev det : ");
        VadBlevDet.setForeground(Color.WHITE);
        dittRes1 = new JTextField(10);


        panel1.add(skrivdingissning);
        panel1.add(dittSvarText1);
        panel1.add(VadBlevDet);
        panel1.add(dittRes1);

        add(panel1);

    }

    public void createGUI2() {

        JPanel panel2 = new JPanel();

        panel2.setLocation(100, 500);
        panel2.setOpaque(false);
        restartApp = new JButton("Starta om");
        restartApp.setLocation(100, 500);
        restartApp.setBackground(Color.WHITE);

        panel2.add(restartApp);

        // add(panel2);
    }


    @Override
    public Dimension getPreferredSize() {
        return (new Dimension(300, 300));
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        //g.drawImage(image, 0,0,this);
    }
}

abstract class callback1 {
    abstract int SetValue(int value);

    abstract void GenerateRandomNumber();

}

Respuestas a la pregunta(1)

Su respuesta a la pregunta