Transférer image entre Panels et Frame
Bonjour tout le monde.
Je n'arrive pas à mettre l'image choisie en fond de la classe Home.
J'ai essayé beaucoup de moyens différents mais je n'ai pas réussi. A chaque fois, j'ai un message d'erreur : java.lang.NullPointerException suivi de unknow source. J'ai essayé de mettre un getter pour récupérer l'image dans la classe Photo (peut-être pas nécessaire), et j'ai fait une méthode dans la classe Home qui changerait l'image de fonds. Mais je ne sais pas si c'est le bon moyen. Afin de simplifier, j'ai supprimé quelques lignes de code.
Les détails ci-dessous.
Voici la classe de mon écran principal.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
public class Home extends JFrame {
private JPanel panelCentre = new JPanel();
private JButton buttonGalery= new JButton("galerie");
public Home(){
setSize(300,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(buttonGalery, BorderLayout.SOUTH);
add(panelCentre);
buttonGalery.addActionListener(new Galerie());
}
public void setFondEcran(JPanel jPanel) {
panelCentre.removeAll();
if ( jPanel!=null ) {
panelCentre.add(jPanel);
}
panelCentre.revalidate();
panelCentre.repaint();
}
class Galerie implements ActionListener{
public void actionPerformed(ActionEvent e) {
PhotoGalerie g = new PhotoGalerie();
g.setVisible(true);
}
}
public static void main(String[] args) {
Home h = new Home();
h.setVisible(true);
}
} |
Voici les deux photos à choisir.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
public class PhotoGalerie extends JDialog{
private JPanel panCenter = new JPanel();
public final ImageIcon[] images;
public PhotoGalerie(){
setModal(true);
setSize(300,500);
images = new ImageIcon[]{
new ImageIcon("NomImage1.jpg"),
new ImageIcon("NomImage2.jpg"),};
final JPanel panCenter = new JPanel(new GridLayout(0,2));
for(ImageIcon image : images) {
JButton button = new JButton( new ImageIcon( image.getImage().getScaledInstance(144,88,java.awt.Image.SCALE_SMOOTH)));
button.addActionListener( new PhotoAgrandir (image) );
panCenter.add(button);
}
add(panCenter, BorderLayout.CENTER);
}
} |
Et encore la classe qui implements actionlistener et qui enregistre l'image en paramètre.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
class PhotoAgrandir implements ActionListener {
private final ImageIcon image;
public PhotoAgrandir(ImageIcon image) {
this.image=image;
}
public void actionPerformed(ActionEvent e) {
Photo p = new Photo();
p.setPanelPhoto (image);
p.setVisible(true);
}
public ImageIcon getImage(){ // je ne sais pas si c'est vraiment nécessaire
return image;
}
} |
Et voici la dernière JDialog. Je souhaite, en appuyant sur le boutton : buttonFondEcran, mettre l'image comme "fonds" de la Frame Home (1ère classe tout en haut).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
public class Photo extends JDialog {
private JButton buttonFondEcran = new JButton("Fond ecran");
private JPanel panNorth = new JPanel();
private JPanel panCenter = new JPanel();
private Home h;
private PhotoAgrandir pa;
public Photo(){
setModal(true);
setSize(300,500);
panNorth.add(buttonFondEcran);
add(panNorth, BorderLayout.NORTH);
add(panCenter, BorderLayout.CENTER);
buttonFondEcran.addActionListener(new changerfondEcran());
}
public void setPanelPhoto(ImageIcon image) {
panCenter.removeAll();
if ( image!=null ) {
panCenter.add( new JLabel(image) );
}
panCenter.revalidate();
panCenter.repaint();
}
public JPanel getPanCenter(){
return panCenter;
}
class changerfondEcran implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
h.setFondEcran(getPanCenter());
}
}
class ButtonReturnClick implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
dispose();
}
}
} |
Quelqu'un pourrait-il me guider svp? merci 8O