2010-07-14 2 views
1

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(); 
} 
+1

Besoin de voir le code qui crée cette interface utilisateur;) –

+0

Code reformaté; s'il vous plaît revenir si incorrect. – trashgod

+0

Est-ce que 'loadImages()' est appelé plusieurs fois? – trashgod

Répondre

0

Il n'y a pas besoin de toute cette interface utilisateur de repeindre et de mettre à jour. Je suggère d'utiliser JLabel pour montrer les images au lieu de JPanel:

  1. Créer un JPanel avec vertical BoxLayout (choisir une autre mise en page selon les besoins)
  2. Ajoutez autant d'étiquettes à pour chaque image.
  3. Ajouter un panneau au volet de défilement.
  4. Définissez la taille préférée du panneau de défilement et ajoutez-le au cadre.
  5. empaquetez le cadre et montrez-le.

Il n'y a rien de plus à faire ici. Un autre conseil ... make sure it is all done on EDT. Faites-moi savoir si vous voulez que je mette un exemple de code ici.

+0

Qu'est-ce que l'EDT? @eugener, je vais essayer. Cordialement – marionmaiden

+1

Vous devez savoir que vous utilisez Swing :). C'est le fil d'expédition d'événement - fil d'oscillation. Concept très important dans le développement basé sur Swing.Voici un couple de liens pour vous - lire attentivement: http://java.sun.com/products/jfc/tsc/articles/threads/threads2.html http://today.java.net/pub/a/today/2007/08/30/debugging-swing.html –

Questions connexes