Impostare un icona situata nel proprio path?

di il
4 risposte

Impostare un icona situata nel proprio path?

Salve a tutti.
Come dedurrete dal titolo, vorrei assegnare al mio programma un icona al posto della solita icona java standard che appare quando apro il software.
Spulciando tra le API Java 8 e cercando un po' nella rete, ho capito che per fare questo ho bisogno di importare java.awt.Image e java.awt.Toolkit
Quello che non ho capito è il metodo:
Image immagineIc=Toolkit.getDefaultToolkit().getImage();
        frame.setIconImage(immagineIc);
Mi spiego meglio:
Il programma, che è un banalissimo frame, una volta compilato prenderò il suo file.jar e lo incapsulerò in un estensione .app (perché sto lavorando su OSX).
Come faccio a dirgli che l'icona da eseguire si trova nella stessa Directory in cui si trova il file.jar?

Vi faccio vedere anche il codice per intero in modo da poter fornire ogni singolo dettaglio:
import javax.swing.JFrame;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JPanel;
import java.awt.Container;
import java.awt.BorderLayout;
public class MySoft 
{
    public static void main(String[] args) {
        //**Costruzione del Frame**//
        JFrame frame = new JFrame("My Software");
        frame.setSize(400, 400);
        frame.setLocation(800, 300);
        //**Icona**//
          ???
        //**Creazione del bottone**//
        JButton button = new JButton("OK");
        //**Azione del bottone**//
        button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e)
    {
        frame.dispose();
    }
});
        //**Creazione del pannello**//
        JPanel panel = new JPanel();
        //**Inserimento bottone nel contenitore pane con BorderLayout**//
        Container pane = frame.getContentPane();
        pane.add(button, BorderLayout.PAGE_END);
        //**Inserimento pannello con bottone nel frame**//
        frame.add(panel);
        //**Impostazione di visibilità del frame all'apertura**//
        frame.setVisible(true);
        //**Modalità di chiusura del frame**//
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
}

4 Risposte

  • Re: Impostare un icona situata nel proprio path?

    LightSoul94 ha scritto:


    Spulciando tra le API Java 8 e cercando un po' nella rete, ho capito che per fare questo ho bisogno di importare java.awt.Image e java.awt.Toolkit
    Quello che non ho capito è il metodo:
    Image immagineIc=Toolkit.getDefaultToolkit().getImage();
            frame.setIconImage(immagineIc);
    In generale, se una immagine fa "parte fissa" della applicazione, è bene referenziarla/caricarla usando il concetto delle risorse, vedi i getResource/getResourceAsStream di java.lang.Class.

    Poi visto che vuoi impostare la icona della finestra, se usi almeno Java 6 puoi sfruttare il nuovo setIconImages che permette di impostare più icone alla finestra, in modo che la piattaforma/SO possa scegliere quella/e più appropriata/e.

    E c'è anche un mio esempio completo: multi-icons-window
  • Re: Impostare un icona situata nel proprio path?

    Grazie per il link andbin, ma vorrei inserire io l'icona nel programma.
    C'è un modo per inserire un'icona nel programma? devo creare una classe a parte?
    (Come compilatore uso NetBeans 8.0.2)

    Tipo per esempio su Applescript se compilo una cosa del genere riesco a ottenere il percorso del file:
    on run {input, parameters}
    set p to POSIX path of (path to me)
    end run
    
    Esiste un codice del genere su Java? O ancora meglio, è possibile importarlo direttamente dentro una classe in modo da poter gestire l'icona in maniera permanente?
  • Re: Impostare un icona situata nel proprio path?

    LightSoul94 ha scritto:


    ma vorrei inserire io l'icona nel programma.
    Che vuol dire?? Se vuoi impostare la icona della finestra, ci sono solo i setIconImage/setIconImages da usare "programmaticamente". Stop, tutto qui.

    Se intendi la icona che il S.O. visualizza per un certo tipo di file es .jar, .exe o quello che è .... Java non c'entra più nulla.
  • Re: Impostare un icona situata nel proprio path?

    Si intendevo dire inserire un icona per la finestra, ma non so perchè non appare:
    import javax.swing.JFrame;
    import java.awt.Image;
    import java.awt.Toolkit;
    import javax.swing.JButton;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.JPanel;
    import java.awt.Container;
    import java.awt.BorderLayout;
    public class MySoft 
    {
        public static void main(String[] args) {
            //**Costruzione del Frame**//
            JFrame frame = new JFrame("My Software");
            frame.setSize(400, 400);
            frame.setLocation(800, 300);
            //**Icona**//
            Image immagineIc = Toolkit.getDefaultToolkit().getImage("icon.png");
            frame.setIconImage(immagineIc);
            //**Creazione del bottone**//
            JButton button = new JButton("OK");
            //**Azione del bottone**//
            button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e)
        {
            frame.dispose();
        }
    });
            //**Creazione del pannello**//
            JPanel panel = new JPanel();
            //**Inserimento bottone nel contenitore pane con BorderLayout**//
            Container pane = frame.getContentPane();
            pane.add(button, BorderLayout.PAGE_END);
            //**Inserimento pannello con bottone nel frame**//
            frame.add(panel);
            //**Impostazione di visibilità del frame all'apertura**//
            frame.setVisible(true);
            //**Modalità di chiusura del frame**//
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        
    }
    Ps. l'icona può avere un estensione diversa da .png tipo .icns?
Devi accedere o registrarti per scrivere nel forum
4 risposte