Il ya quelque temps, j'ai fait la question suivante sur le placement de plusieurs images dans un JFrame: Can I create a JFrame with multiple images?. Le problème est le suivant: Lorsque je suis en train de déplacer la barre de défilement pour voir les images, j'ai compris qu'elle consomme beaucoup de mémoire (environ 1 Mo chaque rouleau de défilement pour toute la trame). Lorsque je travaille avec le même JFrame renouvelé plusieurs fois (environ 100 fois dans mon cas), cela devient un problème.Jpanel avec plusieurs images - Utilisation de la mémoire
Donc, j'ai besoin d'aide pour éviter la forte consommation de mémoire en utilisant JFrames.
J'ai essayé de faire le même écran en utilisant Frame, mais cela n'a pas fonctionné du tout. Merci.
PS: Le code mis en œuvre est relativement simple (il a été fait dans Netbeans) et sur la base anwer correcte de l'autre question:
Note, painel
est une sous-classe de JPanel
et dessine l'image dans un JPanel
.
ArrayList<painel> panels;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
/** Creates new form Frame */
public Frame() {
initComponents();
panels = new ArrayList<painel>();
this.setLocationRelativeTo(null);
}
// Load the images in the panel
public void loadImages(ArrayList<String> names) {
jPanel1.removeAll();
jScrollPane1.getVerticalScrollBar().setValue(0);
panels.clear();
for (String name : names) {
panels.add(new painel(name));
}
for (painel p : panels) {
jPanel1.add(p);
p.repaint();
}
jPanel1.updateUI();
}
// Generated By NetBeans
@SuppressWarnings("unchecked")
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jPanel1 = new javax.swing.JPanel();
jPanel1.setMinimumSize(new java.awt.Dimension(500, 7000));
jPanel1.setPreferredSize(new java.awt.Dimension(500, 7000));
jPanel1.setLayout(new javax.swing.BoxLayout(
jPanel1, javax.swing.BoxLayout.Y_AXIS));
jScrollPane1.setViewportView(jPanel1);
jScrollPane1.getVerticalScrollBar().setUnitIncrement(50);
javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addComponent(
jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.DEFAULT_SIZE, 581, Short.MAX_VALUE));
layout.setVerticalGroup(layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addComponent(
jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.DEFAULT_SIZE, 480, Short.MAX_VALUE));
pack();
}
Besoin de voir le code qui crée cette interface utilisateur;) –
Code reformaté; s'il vous plaît revenir si incorrect. – trashgod
Est-ce que 'loadImages()' est appelé plusieurs fois? – trashgod