Como definir o tamanho do painel personalizado que funcionará com o gridbaglayout?

este é o meu problema, espero que você me ajude de alguma forma. Eu tenho uma classe que se estendeJPanele essa classe está criando um retângulo com umpaintComponent método. Quando adiciono essa classe aoJPanel quem temgridBagLayout, primeiro não está aparecendo. Mas quando eu definoDimension.getPreferredSize() nessa aula, eu posso ver o retângulo ... e o problema é quando eu ligoMouseListener e veja que o retângulo está se movendo apenas em um pequeno quadrado no quadro. Então eu acho que de alguma forma esse métodogetPreferredSize() está controlando o lugar onde o retângulo se moverá e estará.

Aqui está uma foto do meu problema:

move3

exibição de limitação / moving4

Aqui está o código:

A Principal:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class PrikazGUI {

JFrame frejm;
JPanel k;
JButton b1,b2;

public PrikazGUI(){
    frejm = new JFrame("Lala");
    k = new JPanel();
    k.setLayout(new GridBagLayout());
    Kvadrat l = new Kvadrat();
    JPanel a = new JPanel();
    a.add(l);
    k.add(a);

    frejm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frejm.setSize(1900, 1000);
    frejm.getContentPane().add(k);
    frejm.setVisible(true);


}


public static void main(String[] args) {
    PrikazGUI a = new PrikazGUI();

}

Segunda classe:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

 import javax.swing.JPanel;

public class KvadratPravi extends JPanel {

int sizeH = 60;
int sizeW = 60;



@Override
protected void paintComponent(Graphics g) {
    // TODO Auto-generated method stub
    super.paintComponent(g);
        g.setColor(Color.PINK);
       g.drawRect(0, 0, sizeH, sizeW);
       g.fillRect(0, 0, sizeH, sizeW);
}

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

 }

Terceira classe:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

import javax.swing.JButton;
import javax.swing.JPanel;

public class Kvadrat extends JPanel {

JButton b1,b2;
JPanel panel;
KvadratPravi s1 = new KvadratPravi();
int x,y;


public Kvadrat(){
    GridBagConstraints cst = new GridBagConstraints();

    panel = new JPanel();
    panel.setLayout(new GridBagLayout());


    final KvadratPravi s = new KvadratPravi();
    cst.gridx = 0;
    cst.gridy = 0;
    s.setPreferredSize(new Dimension(40,40));
    s.setBounds(0, 0, 400, 400);
    panel.add(s,cst);

    JosJedanKvadrat j = new JosJedanKvadrat();
    j.setPreferredSize(new Dimension(40,40));
    j.setBounds(0, 0, 400, 400);
    cst.gridx = 0;
    cst.gridy = 4;

    panel.add(j,cst);

    s.setPreferredSize(new Dimension(400,400));
    s.setBounds(400, 400, 400, 1000);
    s.addMouseListener(new MouseAdapter() {
        public void mousePressed(MouseEvent e) {
        if(!e.isMetaDown()){
        x = e.getX();
        y = e.getY();
        }
        }
        });
        s.addMouseMotionListener(new MouseMotionAdapter() {
        public void mouseDragged(MouseEvent e) {
        if(!e.isMetaDown()){
        Point p = s.getLocation();
        s.setLocation(p.x + e.getX() - x,
        p.y + e.getY() - y);
        }
        }
        });
    cst.gridx = 2;
    cst.gridy =4;
    panel.add(s1,cst);
    JPanel k = new JPanel();
    k.add(panel);
    add(k);

}



}

Quarta classe:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JPanel;

public class JosJedanKvadrat extends JPanel {

int sizeH = 60;
int sizeW = 60;



@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.BLUE);
       g.drawOval(0, 0, sizeH, sizeW);


}

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

 }

questionAnswers(0)

yourAnswerToTheQuestion