Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883

    Inserire immagini in un pannello in java

    Vorrei sapere come fare ad inserire un'immagine in un jpanel senza doverla inserire in uno scrollpanel, ho provato ad usare la classe media tracker ed ho scritto questo codice ma non funziona:

    import javax.swing.*;
    import java.awt.Toolkit;
    import java.awt.Image;
    import java.net.URL;
    import javax.swing.JLabel;
    import java.awt.GridLayout;
    import java.awt.MediaTracker;
    import java.awt.Graphics;

    public class Jta extends JFrame{
    Image image;
    public Jta () {
    super("Esempio di JTextArea");
    setSize(350,100); //larghezza - altezza in pixel
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    jta.setEditable(false);
    //carico il logo del programma
    URL url = ClassLoader.getSystemResource("images/Logo.gif");
    image = Toolkit.getDefaultToolkit().getImage(url);

    JPanel contentPane = new JPanel();

    MediaTracker mt = new MediaTracker(contentPane);
    mt.addImage(image, 1);

    try {
    mt.waitForAll();
    } catch (InterruptedException e){
    }
    Graphics g=null;
    g.drawImage(image, 30, 30, null);

    setContentPane(contentPane);
    setVisible(true);

    }

    public static void main (String[] args) {
    new Jta();
    }

    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798

    Re: Inserire immagini in un pannello in java

    jta.setEditable(false);
    # questo metodo non lo conosco !!!

    Graphics g=null;
    # che significa assegnargli null ?

    g.drawImage(image, 30, 30, null);
    # su null, non puoi disegnare

    anche se scrivessi
    Graphics g = contentePane.getGraphics();

    g varrebbe null, perchè l'oggetto Graphics del pannello non esiste ancora.

    Ciao.
    Slack? Smack!

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    Hai ragione il problema è "g"
    come faccio a creare g in modo da poter disegnare?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    L'immagine potresti incorporarla anche in un oggetto JLabel, e ti risparmi un po di lavoro.
    Se prefirisci utilizzare un JPanel, creati una classe che estanda il pannello e ridefinisci il metodo:
    protected paintComponent(Graphics g)
    il quale verrà richiamato ogni volta sia necessario aggiornare il pannello.
    Nel costruttore utilizza il MediaTracker per caricare l'immagine e memorizzarla in una variabile.

    Spero di essermi fatto capire.

    Ciao.
    Slack? Smack!

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    Perfetto grazie delle dritte, allora procedo così:
    prima provo con una JLabel, poi provo nel secondo modo.
    Per quanto riguarda il secondo modo ho una domanda.
    Siccome la classe che disegna l'immagine estende di già un'altra classe, non posso dirgli di estendere un JPanel
    La soluzione che mi viene in mente è creare un'altra classe che estenda il JPanel.
    La domanda è questa: se invece non volessi creare un'altra classe che estenda la JPanel, esiste un'altra soluzione?

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    Quello che dici è corretto, java supporta l'ereditarietà singola.
    Se tu crei un componente (che estenda quello che vuoi) per fare qualcosa (disegnare ad esempio) puoi utilizzarlo all'interno di un'altro componente/contenitore senza nessun problema.
    Nel caso corrente, puoi creare una classe che estenda un JPanel per disegnare, inseredo una sua istanza all'interno di un JFrame come hai fatto nel primo post.

    Ciao e buon lavoro.
    Slack? Smack!

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    Originariamente inviato da abcd1000
    [...]
    La domanda è questa: se invece non volessi creare un'altra classe che estenda la JPanel, esiste un'altra soluzione?
    Mi ero scordato del secondo punto.
    Potresti creare una classe interna in questo modo:
    codice:
    ...
    JPanel panel = new JPanel() {
        protected void paintComponent(Graphics g) {
            // actions
       }
    }
    ...
    Ti ho scritto JPanel, ma puoi farlo con qualunque classe.
    Slack? Smack!

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    thx stasera provo il tutto

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 © 2024 vBulletin Solutions, Inc. All rights reserved.