Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    11

    JLabel, Icon ed immagini

    Ciao a tutti!
    Ho perso già mezza giornata e la cosa mi fa spazientire non poco.

    Descrivo la situazione:
    Ho una JDialog che contiene una JScrollPane che a sua volta contiene delle JLabel.
    Ogni label ha un'icona, che corrisponde ad un'immagine sul disco (e viceversa, cioè c'èuna label per ogni immagine in una data cartella).

    Vorrei che al cambiare delle immagini sul disco cambiassero anche le icone delle label (le immagini sul disco posson cambiare solo quando la JDialog non è attiva).

    La JDialog viene invocata da un frame in determinate circostanze(come può essere la pressione di un tasto) ed ogni volta faccio la new.

    Il problema è che le icone non si aggiornano. Nel caso specifico, quando aggiungo un'immagine (e quindi le JLabel aumentano di una unità) e posizione questa nuova label
    come la prima della derie, mantiene l'icona che c'era in quella posizione nell'apertura precedente della JDialog).

    Spero di esser stato chiaro... Magari ho fatto un pò d confusione, ma
    Le ho provate tutte, Garbage Collector, removeComponent.... bla bla...

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Bisognerebbe avere un po' di codice da controllare... secondo me il problema risiede in qualche array che viene valorizzato all'inizio e non più aggiornato ad ogni creazione della JDialog.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    11
    Ciao Lele,
    questa è la porzione di codice in cui setto le icone.

    ........//qui scorro la lista delle immagini sull'hard disk
    File[] previewFiles = previewsDir.listFiles();
    if(previewFiles!=null) {
    for(int i=0;i<previewFiles.length;i++) {
    imgPath = previewFiles[i].getAbsolutePath();
    if(imgPath.endsWith("jpg")){
    addCurrentPagePreview(imgPath, i);
    }
    }
    }
    ......

    /************************************************** ***************/
    //questo è il metodo chiamato per ogni file immagine
    private void addCurrentPagePreview(String imgPath,int pageNumber)
    {
    Icon icon;
    JLabel lbImage;
    int x,y,index=pageNumber+1;
    x = 20 + (pageNumber%4)*220;
    y = 20 + (pageNumber/4)*220;

    icon = new ImageIcon(imgPath);
    lbImage = new JLabel();
    lbImage.setIcon(icon);
    lbImage.setToolTipText(""+index);
    lbImage.setLocation(x, y);
    lbImage.setSize(icon.getIconWidth(), icon.getIconHeight());
    lbImage.setVisible(true);
    lbImage.setBorder(BorderFactory.createEtchedBorder ());
    jpIndex.add(lbImage);

    }

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Ok... ora supponiamo che all'interno della directory esista un file che non ha estensione JPG... l'indice i del for avanza, consegnando al metodo addCurrentPagePreview un valore sbagliato, con le conseguenze che ne puoi trarre.
    Situazione d'esempio:

    0 - File1.JPG
    1 - File2.JPG
    2 - File3.CheNeSo
    3 - File4.JPG
    ...


    Ecco la sequenza di chiamate al metodo addCurrentPagePreview:
    codice:
    addCurrentPagePreview("File1.JPG",0);
    addCurrentPagePreview("File2.JPG",1);
    addCurrentPagePreview("File4.JPG",3);  // <-- E il 2?? Non viene passato!!
    Per risolvere questo problema devi utilizzare una seconda variabile (chiamiamola j), che viene incrementata solamente se il file ha estensione JPG.
    In questo modo:
    codice:
    int j = 0;
    ...
    for(int i=0;i<previewFiles.length;i++) {
       imgPath = previewFiles[i].getAbsolutePath();
       if(imgPath.endsWith("jpg")){
          addCurrentPagePreview(imgPath, j);
          j++;
       }
    }
    Prova a vedere se questo risolve il problema.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    11
    In realtà nella cartella ci sono solo jpg, quindi non è questo il problema.
    ho cmq provato anche con i FileFilter nella chiamata a previewsDir.listFiles(),
    ma niente!
    qualke altra idea?
    please...

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Il codice che hai postato fa parte della classe che rappresenta la JDialog?
    La parte di codice che legge il contenuto della directory e richiama il metodo addCurrentPagePreview() viene eseguita prima o dopo che la JDialog è stata visualizzata? Potrebbero esserci dei problemi relativi al lay-out dei componenti, se il codice postato viene richiamato dopo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    11
    Il codice postato viene invocato dalla chiamata al costruttore della JDialog e prima che la questa venga visualizzata.

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    A questo punto credo che il problema risieda altrove e non nella parte di codice che hai postato, che mi sembra corretta.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.