Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    32

    settare gap tra ImageIcon

    ciao a tutti, sto realizzando una stringa di imageicon e vorrei che non ci fosse nessun gap tra di esse, cioè che siano tutte attaccate tra loro
    come devo fare?

    questo è il codice al momento:

    "...
    JFrame f=new JFrame("Prova per casella");
    Container c=f.getContentPane();
    JPanel p=new JPanel();
    p.setLayout(new GridLayout(6,7));
    for(int i=0;i<42;i++){
    Icon[] groupicon=new Icon[42];
    groupicon[i]=new ImageIcon("empty.jpg");
    JLabel label=new JLabel(groupicon[i]);
    f.setLocation(300,100);
    p.add(label);
    }
    c.add(p);
    ..."

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: settare gap tra ImageIcon

    Originariamente inviato da giova86
    ciao a tutti, sto realizzando una stringa di imageicon e vorrei che non ci fosse nessun gap tra di esse, cioè che siano tutte attaccate tra loro
    come devo fare?
    Il problema non è tanto la JLabel ma nel "contenitore" e nel layout manager usato!

    Crei un JPanel che metti nel content pane del JFrame, per essere precisi lo metti nella parte CENTER del BorderLayout. Quindi il JPanel occupa tutto lo spazio possibile del content pane.

    Nel JPanel hai impostato un GridLayout di 6x7 celle e in ogni cella metti un JLabel che ha un ImageIcon. La immagine sta al centro della label ma il fatto è che la dimensione della label non dipende dalla dimensione della immagine ma dalla suddivisione delle aree nel pannello ad opera del GridLayout! Quindi dalla dimensione del pannello che a sua volta dipende dalla dimensione del frame.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    32
    scusami, sarà che non conosco bene il linguaggio java ma non ho capito cosa dovrei fare..
    puoi essere piu specifico?
    pensavo fosse sufficiente aggiungere una stringa per impostare il bordo di ogni oggetto..

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da giova86
    scusami, sarà che non conosco bene il linguaggio java ma non ho capito cosa dovrei fare..
    puoi essere piu specifico?
    pensavo fosse sufficiente aggiungere una stringa per impostare il bordo di ogni oggetto..
    Ok, veniamo al punto: quale è la dimensione del JFrame??? Imposti tu una dimensione esplicita f.setSize(....) ?? O fai un f.pack() ??

    La dimensione di una JLabel dipende dalla suddivisione delle aree fatta da GridLayout. Se il pannello (il tuo 'p') che ha il GridLayout è largo es. 350 pixel, allora GridLayout con 7 colonne assegna ad un componente la larghezza di 50 pixel.

    Ma la dimensione del pannello dipende dalla dimensione del content pane del frame (perché nella parte CENTER occupa tutto lo spazio possibile) e quindi dalla dimensione del JFrame.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    32
    io facevo pack()..

    non avevo intenzione di fare setSize perche in questo modo ridimensionando il frame con il mouse le icone si allontanano tra loro, cosa ke succede anche con pack..
    mentre io vorrei che rimanessero tutte attaccate tra loro, senza spazi, anche ingrandendo il frame con il mouse..

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da giova86
    non avevo intenzione di fare setSize perche in questo modo ridimensionando il frame con il mouse le icone si allontanano tra loro
    Appunto è questo che dicevo ... il tutto dipende dalla dimensione del frame perché il panel è nel content pane nella parte che occupa tutto il possibile.

    Originariamente inviato da giova86
    cosa ke succede anche con pack..
    mentre io vorrei che rimanessero tutte attaccate tra loro, senza spazi, anche ingrandendo il frame con il mouse..
    Alt. Se fai pack(), all'inizio le immagini sono per forza tutte attaccate una all'altra (l'unico caso sarebbe se il totale in larghezza fosse inferiore alla larghezza minima di un JFrame .... ma è piccola, comunque, tale larghezza minima).

    Perché pack() dimensiona il componente andando a determinare (e quindi tenendone conto) il "preferred size" dei sub-componenti.

    Ma se ridimensioni il frame, così esattamente come hai fatto, è chiaro che le celle nel GridLayout si espandono. Se non è questo che volevi, allora sappi che si possono cambiare le cose ma devi cambiare il layout manager del content pane .. insomma, quello dove inserisci il panel.

    Se nel frame non hai altri componenti (solo il panel) fai ad esempio:

    c.setLayout (new FlowLayout ());

    (dove c è il Container del content pane)

    e vedrai che il pannello starà sempre centrato orizzontalmente nel content pane ma il suo contenuto sarà sempre "raggruppato" senza alcun gap indipendentemente dalla dimensione del frame.

    Ti è più chiaro ora?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    32
    Originariamente inviato da andbin
    Appunto è questo che dicevo ... il tutto dipende dalla dimensione del frame perché il panel è nel content pane nella parte che occupa tutto il possibile.

    Alt. Se fai pack(), all'inizio le immagini sono per forza tutte attaccate una all'altra (l'unico caso sarebbe se il totale in larghezza fosse inferiore alla larghezza minima di un JFrame .... ma è piccola, comunque, tale larghezza minima).

    Perché pack() dimensiona il componente andando a determinare (e quindi tenendone conto) il "preferred size" dei sub-componenti.
    eh no, in realtà è proprio questo che dicevo...se faccio pack() mi rimane un piccolo bordo tra le immagini ed è proprio questo quello che vorrei eliminare... vedi immagine..

    invece per mantenere la distanza tra le icons indipendente dal frame quindi mi stai consigliando di usare flowLayout?
    grazie mille per l'aiuto e la pazienza....
    Immagini allegate Immagini allegate

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.