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();
}
}