Problem z wątkami i gui GridBoxLayot

0

Witam

stworzyłem aplikację składająca się z 3 klas, które zamieszczę niżej (pomijam import dla przejrzystości). Problem polega na tym, że obiekty klasy CzasoOdmierzacz nie wyświetlają się poprawnie. Inaczej rzecz ujmując nie poddają się działaniu GridBoxLayout i wszystko się rozjeżdża. Kiedy wstawię na ich miejsce zwykłe obiekty typu JPanel wszystko wygląda jak trzeba.

To główna klasa:

public class JadroCzasu extends JPanel {

	private static final long serialVersionUID = -4828549146735079562L;
	
	
	
	public JadroCzasu(){
		setPreferredSize(new Dimension(850, 400));
		setBorder(BorderFactory.createCompoundBorder(BorderFactory.createMatteBorder(1,1,2,2,Color.black),BorderFactory.createEmptyBorder(5,5,5,5)));
	}
	

	public static void main(String args[]){
		
		CzasoOdmierzacz zegar1 = new CzasoOdmierzacz();
		CzasoOdmierzacz zegar2 = new CzasoOdmierzacz();
		GUI gui = new GUI();
		JadroCzasu jadroczasu = new JadroCzasu();
		
		Thread z1=new Thread(zegar1);
		Thread z2=new Thread(zegar2);
		Thread g0 = new Thread(gui);
		
		zegar1.ustawOpoznienie(1500);
		zegar2.ustawOpoznienie(3000);
		
		z1.setName("Czesiek");
		z2.setName("Rysiek");
		g0.setName("Ja");
		
		gui.UstawZegary(zegar1,zegar2);
		gui.UstawKontener(jadroczasu);
		

		try {
			SwingUtilities.invokeAndWait(g0);
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
	
		z1.start();
		z2.start();
		g0.start();


	}
	
} 

To klasa obiektów z którymi mam problem. Są to panele, na których rysuję różne rzeczy :)

public class CzasoOdmierzacz extends JPanel implements Runnable{


	private static final long serialVersionUID = -2063629324521047369L;
	private long t;
	int i;
	int wymX;
	int wymY;

	CzasoOdmierzacz(){
		t=1000;
		setBackground(new Color(11, 140, 20));
		setPreferredSize(new Dimension(400, 300));

	}

	public void ustawOpoznienie(long t){
		this.t=t;
	}
	
	public void paintComponent(Graphics g) {
		
		g.setColor(Color.black);
		g.drawOval(wymX/2-10*i,wymX/2+10*i,wymX-20+i,wymY-20+i);
		g.setColor(Color.blue);
		g.fillOval(wymX/2-10*i,wymX/2,wymX-20+i,wymY-20-i);
		
	}
	public void run() {
			wymX=getWidth();
			wymY=getHeight();
			while(true)
			{
				try {
					Thread.sleep(t);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println("Wita cię "+Thread.currentThread().getName()+", mam "+ wymX +" szerokości i "+wymY+" wysokosci oraz srodek w x="+ wymX/2 +" i y= "+wymY/2);
				repaint();
				i++;
			}
		}
		
	}

No i na koniec interfejs

 public class GUI implements Runnable {
	CzasoOdmierzacz zegar1, zegar2;
	JadroCzasu kontener;
	private JPanel menuglowne, menu1, menu2, paczka1, paczka2 ;
	
	public void UstawZegary(CzasoOdmierzacz z1, CzasoOdmierzacz z2){
		zegar1=z1;
		zegar2=z2;
	}
	public void UstawKontener(JadroCzasu k0){
		kontener = k0;
	}


	private void stworzipokazGUI() {
        JFrame frame = new JFrame("Jądro Czasu");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JComponent kontener = new JadroCzasu();
        kontener.setOpaque(true);
        frame.setContentPane(kontener);
        dodajPierdoly(kontener);

        frame.pack();
        frame.setVisible(true);
    }
	private void dodajPierdoly(Container kontener){

		JButton Synchronizuj1, Synchronizuj2, Stop1, Stop2, Stop, Start1, Start2, Start;
		kontener.setLayout(new GridBagLayout());
		GridBagConstraints c = new GridBagConstraints();
		
		Synchronizuj1= new JButton("Równaj do Ryśka");
		Synchronizuj2= new JButton("Równaj do Cześka"); 
		Stop1= new JButton("Stój!");
		Stop2= new JButton("Stój!");
		Stop= new JButton("Stójcie!");
		Start1= new JButton("Ruszaj!"); 
		Start2= new JButton("Ruszaj!"); 
		Start= new JButton("Ruszajcie!"); 
		
		c.fill = GridBagConstraints.BOTH;
		c.weightx = 1.0;
		c.weighty = 1.0;
		c.insets = new Insets(1, 1, 1, 1);
		
		
		c.gridx=0;
		c.gridy=0;
		c.weightx = 0.75;
		c.weighty = 0.4;
		c.gridwidth=1;
		c.gridheight=GridBagConstraints.RELATIVE;
		kontener.add(paczka1, c);
		
		
		c.gridx=1;
		c.gridy=0;
		c.weightx = 0.75;
		c.weighty = 0.4;
		c.gridwidth=1;
		c.gridheight=GridBagConstraints.RELATIVE;
		kontener.add(zegar2, c);
		
		menuglowne=new JPanel();
		c.gridx=2;
		c.gridy=0;
		c.weightx = 0.25;
		c.weighty = 1;
		c.gridwidth=1;
		c.gridheight=3;
		menuglowne.setBackground(Color.gray);
		menuglowne.setPreferredSize(new Dimension(150, 500));
		menuglowne.setLayout(new BoxLayout(menuglowne, BoxLayout.Y_AXIS));
		kontener.add(menuglowne, c);
		menuglowne.add(Start);
		menuglowne.add(Stop);
		
		menu1=new JPanel();
		c.gridx=0;
		c.gridy=2;
		c.weightx = 0.4;
		c.weighty = 0.1;
		c.gridwidth=1;
		c.gridheight=GridBagConstraints.REMAINDER;
		menu1.setBackground(Color.darkGray);
		menu1.setPreferredSize(new Dimension(350, 100));
		menu1.setLayout(new BoxLayout(menu1, BoxLayout.X_AXIS));
		menu1.add(Start1);
		menu1.add(Stop1);
		menu1.add(Synchronizuj1);
		kontener.add(menu1, c);
		
		
		menu2=new JPanel();
		c.gridx=1;
		c.gridy=2;
		c.weightx = 0.4;
		c.weighty = 0.1;
		c.gridwidth=1;
		c.gridheight=GridBagConstraints.REMAINDER;;
		menu2.setBackground(Color.darkGray);
		menu2.setPreferredSize(new Dimension(350, 100));
		menu2.setLayout(new BoxLayout(menu2, BoxLayout.X_AXIS));
		menu2.add(Start2);
		menu2.add(Stop2);
		menu2.add(Synchronizuj2);
		kontener.add(menu2, c);
		
	}
	public void run() {

		stworzipokazGUI();
	}

}
0

widzę, że mam podwójny wątek, ale jakiś error miałem podczas dodawania i samo się tak zrobiło :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1