2009-05-26 17 views
5

raczej podstawowe pytanie tutaj facetów.Dodanie dodatkowych JPanels do JPanel

Zasadniczo mam kod jak poniżej:

public SuperPanel() { 
    setLayout(new BorderLayout()); 
    add(panel1(), BorderLayout.NORTH); 
    add(panel2(), BorderLayout.CENTER); 
    add(panel3(), BorderLayout.SOUTH); 
} 

I to wszystko dobrze działa. Problem polega na tym, że mam inną część, którą chcę dodać do centrum. Wystarczy za pomocą add(newPanel(), BorderLayout.CENTER) nie działa, oczywiście. Ale możesz dodać JPanel s w JPanel s, prawda?

Więc zrobiłem następujące zmiany:

public SuperPanel() { 
    setLayout(new BorderLayout()); 
    add(panel1(), BorderLayout.NORTH); 
    add(supersweetpanel(), BorderLayout.CENTER); 
    add(panel3(), BorderLayout.SOUTH); 
} 

Z supersweetpanel() samopoczucia:

public JPanel supersweetpanel() { 
    JPanel sswp = new JPanel(); 
    setLayout(new BorderLayout()); 
    add(panel2(), BorderLayout.NORTH); 
    return sswp; 
} 

Teraz zastępuje panel1! Jeżeli ustawić go do niczego innego (CENTER, SOUTH, co masz), dwie pierwsze płyty znikają całkowicie. Pomoc jest bardzo cenna.

Odpowiedz

13

SuperPanel to prawdopodobnie podklasa JPanel, prawda? Omyłkowego dodanie panel2 do this (the SuperPanel) nie sswp. Spróbuj:

public JPanel supersweetpanel() { 
     JPanel sswp = new JPanel(); 
     sswp.setLayout(new BorderLayout()); 
     sswp.add(panel2(), BorderLayout.NORTH); 
     return sswp; 
    } 
+2

+1. To musi być to, i daje dobry przykład, dlaczego korzystanie z dziedziczenia może sprawić, że sprawy będą kruche. – Eddie

+0

Ah, to było dokładnie to. Śliczny. –

+0

Co powiedział Eddie. Szkoda, że ​​większość tutoriali Swing (i Swing GUI) ma taki zły kod. –