Bonjour,
Je code un carnet d'adresse en Java.
J'ai créée une JFrame. J'ai créée un JPanel(boiteGlobale), que j'ai quadrillé avec un GridLayout. j'ai inserer 2 JPanel(boiteContacts et boiteInfos) dans le premier (boiteGlobale).
Voici le code pour comprendre:
La classe principale (Main):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
public class Main extends javax.swing.JFrame {
 
    /**
     * Creates new form Main
     */
    public Main() {
        initListeContacts();
        initComponents();
    }
    private void initListeContacts(){
        String [][] listePersonnes = {{"Samson","JP","../Photos/photo1.png" },
                                  {"Hollande","F","../Photos/photo2.png" },
                                  {"Dupond","Z","../Photos/photo3.png" },
                                  {"Valls","M","../Photos/photo4.png" },
                                 };
        //Dimension taille;
        listeContacts = new Contact[listePersonnes.length];
        for(int i =0; i<listePersonnes.length;i++){
            listeContacts[i] = new Contact(listePersonnes[i],i);
            //taille = listeContacts[i].getPreferredSize();
            //listeContacts[i].setBounds(0, i*(taille.height + 2), taille.width, taille.height);
            boiteContacts.add(listeContacts[i]);
            boiteContacts.validate();
 
 
        }
 
    }
    private Contact [] listeContacts;
 
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
 
        boiteGlobale = new javax.swing.JPanel();
        boiteContacts = new javax.swing.JPanel();
        boiteInfos = new javax.swing.JPanel();
 
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 
        boiteGlobale.setLayout(new java.awt.GridLayout(1, 2));
 
        boiteContacts.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Liste Contacts", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.TOP));
 
        javax.swing.GroupLayout boiteContactsLayout = new javax.swing.GroupLayout(boiteContacts);
        boiteContacts.setLayout(boiteContactsLayout);
        boiteContactsLayout.setHorizontalGroup(
            boiteContactsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 358, Short.MAX_VALUE)
        );
        boiteContactsLayout.setVerticalGroup(
            boiteContactsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 480, Short.MAX_VALUE)
        );
 
        boiteGlobale.add(boiteContacts);
 
        boiteInfos.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), " Aperçu ", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.TOP));
 
        javax.swing.GroupLayout boiteInfosLayout = new javax.swing.GroupLayout(boiteInfos);
        boiteInfos.setLayout(boiteInfosLayout);
        boiteInfosLayout.setHorizontalGroup(
            boiteInfosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 358, Short.MAX_VALUE)
        );
        boiteInfosLayout.setVerticalGroup(
            boiteInfosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 0, Short.MAX_VALUE)
        );
 
        boiteGlobale.add(boiteInfos);
 
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 761, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(boiteGlobale, javax.swing.GroupLayout.DEFAULT_SIZE, 741, Short.MAX_VALUE)
                    .addContainerGap()))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 535, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(22, 22, 22)
                    .addComponent(boiteGlobale, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addContainerGap()))
        );
 
        pack();
    }// </editor-fold>                        
 
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see <a href="http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html" target="_blank">http://download.oracle.com/javase/tu...feel/plaf.html</a> 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
 
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Main().setVisible(true);
            }
        });
    }
 
    // Variables declaration - do not modify                     
    private javax.swing.JPanel boiteContacts;
    private javax.swing.JPanel boiteGlobale;
    private javax.swing.JPanel boiteInfos;
    // End of variables declaration                   
}
La classe Contact:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import java.awt.Image;
import javax.swing.ImageIcon;
 
public class Contact extends javax.swing.JPanel {
 
    /**
     * Creates new form Contact
     */
    public Contact(String [] liste, int ni) {
        setVisible(true);
        initComponents();
        setListeInfos(liste);
        setId(ni);
        afficheInfos();
    }
 
    public String[] getListeInfos() {
        return listeInfos;
    }
 
    public void setListeInfos(String[] listeInfos) {
        this.listeInfos = listeInfos;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
    private void afficheInfos(){
        prenomLbl.setText(listeInfos[0]);
        nomlLbl.setText(listeInfos[1]);
        affichePhoto();
        //System.out.println(listeInfos[0] +"   " + listeInfos[1] + "  "+listeInfos[2]);
    }
 
 
    private String [] listeInfos;
    private int id;
 
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
 
        photoLbl = new javax.swing.JLabel();
        prenomLbl = new javax.swing.JLabel();
        nomlLbl = new javax.swing.JLabel();
 
        setMaximumSize(new java.awt.Dimension(390, 50));
        setMinimumSize(new java.awt.Dimension(390, 50));
        setPreferredSize(new java.awt.Dimension(390, 50));
        setRequestFocusEnabled(false);
        setLayout(new java.awt.GridLayout(1, 3));
        add(photoLbl);
 
        prenomLbl.setText("Prénom");
        add(prenomLbl);
 
        nomlLbl.setText("Nom");
        add(nomlLbl);
    }// </editor-fold>                        
 
 
    // Variables declaration - do not modify                     
    private javax.swing.JLabel nomlLbl;
    private javax.swing.JLabel photoLbl;
    private javax.swing.JLabel prenomLbl;
    // End of variables declaration                   
 
    private void affichePhoto() {
        ImageIcon iconPhoto = new ImageIcon(listeInfos[2]);
        Image uneImage = iconPhoto.getImage();
        uneImage = uneImage.getScaledInstance(50,50,Image.SCALE_SMOOTH);
        iconPhoto.setImage(uneImage);
        photoLbl.setIcon(iconPhoto);
    }
}
a l'execution j'au le message d'erreur suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at Main.initListeContacts(Main.java:37)
	at Main.<init>(Main.java:22)
	at Main$1.run(Main.java:147)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
BUILD SUCCESSFUL (total time: 2 seconds)
En espérant avoir été clair, je compte beaucoup sur votre aide et vous remercie d'avance.