Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Passare un File contenuto in un JAR ad una classe JAVA

    Salve, ho realizzato la seguente classe che dovrebbe mettermi un immagine PNG come sfondo di un JPanel, adesso il problema è che non so come richiamare il File dell'immagine da passare al costruttore della classe.
    codice:
    public class BackgroundedPanel extends JPanel{
      	BufferedImage img;
      	int width;
      	int height;
    
      	public BackgroundedPanel(File f){
        	      super(true); //crea un JPanel con doubleBuffered true
        	      try{
          		   setImage(ImageIO.read(f));
        	      }catch(Exception e) {}
        }
    
      	public void setImage(BufferedImage img){
        	      this.img = img;
        	      width = img.getWidth();
        	      height = img.getHeight();
      	}
    
      // sovrascrivi il metodo paintComponent passandogli l'immagine partendo dalle coordinate 0,0 senza usare un ImageObserver (null)
      	public void paintComponent(Graphics g){
        	      super.paintComponent(g);
        	      g.drawImage(img, 0, 0, null);
      	}
    }
    In genere per richiamare un immagine dal Jar e crearci un'icona per il mio software utilizzo questo metodo:
    codice:
    new ImageIcon(getClass().getResource("/programmatunisia/GraphicalUserInterface/images/immagine.png"))
    non credo che il getClass().getResource("percorso interno al JAR") abbia però lo stesso effetto per caricare quel file... sapreste darmi una dritta su come caricare la stessa immagine.png di cui sopra come se fosse un file??

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

    Re: Passare un File contenuto in un JAR ad una classe JAVA

    Originariamente inviato da fabiolinux85
    adesso il problema è che non so come richiamare il File dell'immagine da passare al costruttore della classe.

    non credo che il getClass().getResource("percorso interno al JAR") abbia però lo stesso effetto per caricare quel file... sapreste darmi una dritta su come caricare la stessa immagine.png di cui sopra come se fosse un file??
    getResource() ritorna un URL .... e uno dei read() di ImageIO accetta un URL. Cosa ne deduci?
    C'è anche getResourceAsStream() che ritorna un InputStream e uno dei read() di ImageIO riceve un InputStream.


    P.S. Alcune note tecniche: A) I campi di istanza mettili private. B) Non catturare eccezioni lì. Il costruttore di BackgroundedPanel dovrebbe dichiarare throws IOException. La eccezione la gestisci altrove. C) Non serve necessariamente super(true). Il costruttore no-arg di JPanel setta già il double-buffering. D) paintComponent() dovrebbe stare protected non public. Non ampliare mai il livello di accesso se non c'è un motivo valido.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    GRAZIE!!!

    Grazie, come sempre il tuo aiuto è stato utilissimo. Però mi sorge un altro problema, in pratica io ho questa situazione, ti faccio un piccolo esempio grafico:

    ----------------------------------------
    | |
    | |
    | |
    | | PANNELLO 1
    | |
    | |
    | |
    ----------------------------------------
    | |
    | |
    | |
    | |
    | |
    | | PANNELLO 2
    | |
    | |
    | |
    | |
    | |
    ----------------------------------------

    e il pannello sottostante dentro cui sono contenuti i JPanel PANNELLO 1 e PANNELLO 2 lo chiamerò PANNELLO.

    A questo punto quello che faccio è creare 2 pannelli, PANNELLOSOPRA (con immagine di sfondo) e PANNELLOSOTTO(con immagine di sfondo) e caricarli rispettivamente dentro PANNELLO1 e dentro PANNELLO2.

    Ora PANNELLO ho un Layout di tipo GRIDBAG che contiene come vedi in figura il PANNELLO1 e il PANNELLO2.

    Tutto funziona alla perfezione, adesso però ho bisogno di aggiungere al PANNELLOSOPRA una JLabel in una posizione precisa, ho provato con:
    codice:
            JLabel label1 = new JLabel("CIAO");
            label1.setForeground(Color.RED);
            label1.setFont(new Font(Font.DIALOG,Font.BOLD,20));
            BorderLayout layoutsopra = new BorderLayout();
            pannellosopra.setLayout(layoutsopra);
            pannellosopra.add(label1, BorderLayout.CENTER);
    La JLabel viene aggiunta soltanto che mi allunga il Pannello1, in pratica visualizzo nel Pannello1 sia il PANNELLOSOPRA (con la sua immagine di sfondo) sia una strisca bianca (prima che inizi l'immagine di sfondo del PANNELLOSOTTO).

    Come posso risolvere.

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

    Re: GRAZIE!!!

    Originariamente inviato da fabiolinux85
    La JLabel viene aggiunta soltanto che mi allunga il Pannello1, in pratica visualizzo nel Pannello1 sia il PANNELLOSOPRA (con la sua immagine di sfondo) sia una strisca bianca (prima che inizi l'immagine di sfondo del PANNELLOSOTTO).

    Come posso risolvere.
    Ehm ... non è molto chiaro ....

    Vediamo se è così:

    codice:
    PANNELLO  (layout: GridBagLayout)
      |
      +-- PANNELLO 1  (layout: ???)
      |     |
      |     +-- PANNELLOSOPRA  (layout: BorderLayout)
      |
      +-- PANNELLO 2  (layout: ???)
            |
            +-- PANNELLOSOTTO  (layout: ???)
    E vuoi mettere un JLabel in PANNELLOSOPRA?? Gli imposti BorderLayout e metti JLabel in CENTER. Fin qui ok. Ma PANNELLOSOPRA è dentro PANNELLO 1.

    E PANNELLO 1 quale layout manager usa??? Un JPanel per default ha un FlowLayout. Che per default ha un hgap/vgap di 5 pixel. E presumo sia questo "gap" che ti annoia.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5

    Provo a impostare il layout al PANNELLO1

    Praticamente PANNELLO1 l'ho aggiunto con NetBeans quindi non sono andato a impostare il layout, credo che di default l'IDE imposti NullLayout. Adesso provo a dare un Layout a quel pannello, però non riesco a capire che nesso ci sia sul fatto che se aggiungo elementi al PANNELLOSOPRA (contenuto in PANNELLO1 e avente un suo proprio layout) questi possano influire sulla disposizione del PANNELLO1. Comunque provo...

  6. #6

    Problema sta nel layout

    Ho constatato che avevi ragione ed il problema sta nel layout tuttavia non riesco a venirne a capo, però ripensandoci bene forse ho impostato male tutto il discorso, ti spiego in breve cosa devo fare.

    Praticamente io ho raffigurato sullo sfondo del pannello una camicia, cliccando in certi punti precisi del pannello vorrei che mi si visualizzi una finestra con alcuni dati, esempio clicco sul collo e mi si apre una finestra con i dati del collo.

    Io avevo pensato di sovrapporre al pannello delle jlabel senza testo e quando col puntatore del mouse passavo sopra(oppure cliccavo) automaticamente si apriva la finestra relativa alla parte della camicia, quindi dovevo mettere una JLabel sopra al collo, una sopra la spalla, una sopra la manica, ecc...ecc...

    Forse il tutto ripensandoci si può fare senza usare le JLabel ma rilevando la posizione del mouse sul pannello, giusto? Mi sapresti consigliare?

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

    Re: Provo a impostare il layout al PANNELLO1

    Originariamente inviato da fabiolinux85
    Praticamente PANNELLO1 l'ho aggiunto con NetBeans quindi non sono andato a impostare il layout, credo che di default l'IDE imposti NullLayout.
    Non lo so .... io generalmente cerco di "pensare" in termini di Java ... non in termini di un IDE. Cosa faccia o possa fare/generare un IDE per i componenti GUI non lo so e normalmente non mi interessa. Personalmente scrivo tutto il codice della GUI a mano.

    Originariamente inviato da fabiolinux85
    però non riesco a capire che nesso ci sia sul fatto che se aggiungo elementi al PANNELLOSOPRA (contenuto in PANNELLO1 e avente un suo proprio layout) questi possano influire sulla disposizione del PANNELLO1.
    Sulla disposizione (in senso di locazione x/y) no ... sulla dimensione sì, può influire ma dipende dalla gestione del layout.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.