Ciao a tutti,
sto inziando ad imparare ad usare la classe Swing per costruire una GUI (e sto anche iniziando a programmare in Java), quindi vi chiedo aiuto.
Sto cercando di suddividere la mia GUI in varie sezioni, come se fosse una pagina HTML.
Quindi ho creato una classe che estende la classe JFrame e all'interno l'ho suddiviso in vari pannelli.
Il problema è che quando inserisco un pannello in un altro pannello, per costruire la gerarchia, non riesco a vedere il contenuto. Dove sbaglio?
Di seguito il sorgente:
package com.zanata.grafica.GUIComplesse;
import javax.swing.*;
import javax.swing.ImageIcon;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MyFrame extends JFrame{
//Dichiaro i miei 3 pannelli che comporranno la mia finestra (ho deciso di suddividere in 3 aree la mia finestra)
//IMAGEPANEL: E'una classe che eredita da JPanel e che mi permette di inserire un'immagine come sfondo
ImagePanel headerPnl = new ImagePanel(new ImageIcon("c:/pulsanti/Header_Zigrinato_ok.png").getImage());
ImagePanel centroPnl = new ImagePanel(new ImageIcon("c:/pulsanti/Centro.png").getImage());
ImagePanel footerPnl = new ImagePanel(new ImageIcon("c:/pulsanti/Footer.png").getImage());
ImagePanel headerSuPnl = new ImagePanel("");
//Poi istanzio tutti i componenti che utilizzerò nei miei panel
ImageIcon imgAccesso = new ImageIcon("c:\\Pulsanti\\Accesso.png");
JButton pulsanteLogin = new JButton(imgAccesso);
JLabel lblLettiInVista = new JLabel("Qui ci metto i letti in vista");
JLabel lblLetti = new JLabel("Qui ci metto i letti normali");
JLabel lblFooter = new JLabel("Qui ci metto il copyright");
//Costruttore
public MyFrame(){
super("Esempio");
//HEADER
headerPnl.setLayout(new GridLayout(2,1));
//headerSuPnl.setOpaque(false);
headerSuPnl.setLayout(new GridLayout(1,2));
headerSuPnl.add(lblLettiInVista);
headerSuPnl.add(lblLetti);
//IL PROBLEMA sta qui perchè vorrei che una cella cel mio headerPnl contenesse un altro Panel (headerSuPnl), ma quando eseguo non vedo il contenuto del mio headerSuPnl
headerPnl.add(headerSuPnl);
//CENTRO
//Assegno al pannello centrale un layout di tipo GridLayout
centroPnl.setLayout(new GridLayout(2,1));
centroPnl.add(lblLettiInVista);
centroPnl.add(lblLetti);
//FOOTER
//Al pannello sud non assegno alcun layout
footerPnl.add(lblFooter);
//Aggiungo al mio frame i pannelli relativamente a nord, sud,ovest
getContentPane().add(headerPnl,BorderLayout.NORTH) ;
getContentPane().add(centroPnl,BorderLayout.CENTER );
getContentPane().add(footerPnl,BorderLayout.SOUTH) ;
pack();
setSize(995,660);
setVisible(true);
}
class ImagePanel extends JPanel {
private Image img;
public ImagePanel(String img) {
this(new ImageIcon(img).getImage());
}
public ImagePanel(Image img) {
this.img = img;
Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
setLayout(null);
}
public void paintComponent(Graphics g) {
g.drawImage(img, 0, 0, null);
}
}
}