05.23.08
Adăugarea componentelor în Content Pane
Iată codul din exemplul precedent care este utilizat pentru a obţine panoul de conţinul (content pane) pentru frame-ul creat şi adăugarea unei etichete (JLabel) colorate în galben.
frame.getContentPane().add(yellowLabel, BorderLayout.CENTER);
Aşa cum se vede din linia de cod de mai sus, panoul conţinut (content pane) al container-ului top-level, se determină apelând metoda getContentPane. “Panoul conţinut” implicit, este un simplu container intermediar, moştenit de la obiectul JComponent şi care utilizează un BorderLayout ca manager al interfeţei.
Este uşor să se particularizeze “content pane”-ul - setând layout manager-ul sau adăugând un “border”, de exemplu. Cu toate acestea, există o mică capcană. Metoda GetContentPane returnează un obiect container, nu un obiect JComponent. Aceasta însemnă că dacă se urmăreşte obţinerea unor avantaje ca “content pane” al unui obiect de tip JComponent, trebuie să se typecast (transformare de tip) valoarea returnată, sau să se creeze propria componentă care să fie panoul conţinut. În general, se preferă cea de-a două modalitate, de a crea propria componentă, fiind un pic mai curată.
De menţionat faptul că, implicit, layout manager-ul pentru JPanel este FlowLayout şi probabil se va dori modificarea lui.
Pentru a realiza o componentă a “content pane” utilizăm metoda setContentPane, a container-ului top-level. de exemplu:
//Create a panel and add components to it.
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(someBorder);
contentPane.add(someComponent, BorderLayout.CENTER);
contentPane.add(anotherComponent, BorderLayout.PAGE_END);
topLevelContainer.setContentPane(contentPane);
Atenţie! Ca un avantaj, metoda add şi variantele sale, remove şi setLayout au fost suprascrise, putând transmite contentPane-ului, după cum este necesar. Aceasta înseamnă că se poate scrie:
frame.add(child);
iar “child” va fi adăugat contentPane-ului.
De notat că numai aceste trei metode pot face acest lucru. Aceasta înseamnă că metoda getLayout() nu va returna layout-ul setat cu setLayout().