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

    [JAVA] Inserire immagini

    Ciao a tutti come faccio ad inserire al posto dei quadrati delle immagini diverse l'una dall'altra?

    Posto il codice di tutte le classi:

    La classe dove viene lanciato il programmino

    codice:
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.util.LinkedList;
    
    import javax.swing.JFrame;
    
    public class Main {
    
       private JFrame frame;
       
       public Main() {
          frame =  new JFrame("Piove");
          frame.setSize(new Dimension(300,300));
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setLayout(new BorderLayout());
          frame.getContentPane().add(getFilledCPanel(),BorderLayout.CENTER);
          
          frame.setVisible(true);
       }
       
       private Component getFilledCPanel() {
          LinkedList<Characters> list = new LinkedList<Characters>();
          for (int i = 0; i < 4; i++) {
             list.add(new Characters((i*40),0));
          }
          return new CustomPanel(list);
       }
    
       public static void main(String[] args) {
          new Main();
       }
    }
    Il pannello dove vengono disegnati i quadrati

    codice:
    import javax.swing.JPanel;
    
    public class CustomPanel extends JPanel {
       
       private LinkedList<Characters> list;
       
       public CustomPanel() {
          setSize(new Dimension(300,300));
          setBackground(Color.white);
       }
    
       public CustomPanel(LinkedList<Characters> a){
          this();
          list = a;
       }
       @Override
       protected void paintComponent(Graphics g) {
          super.paintComponent(g);
          for (Characters c : list) {
             c.draw(g);
          }
          repaint();
       }
    }
    e infine quella dove dovrei inserire l'immagini


    codice:
    import java.awt.Color;
    import java.awt.Graphics;
    
    public class Characters extends Thread {
       private int x;
       private int y;
       public Characters(int a,int b) {
          x = a;
          y = b;
          start();
       }
       
       @Override
       public void run() {
          for (int i = 0; i < 15; i++) {
             y += i;
             try {
                Thread.sleep(200);
             } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
             }
          }
       
       }
    
       public void draw(Graphics graphics){
          graphics.setColor(Color.BLACK);
          graphics.draw3DRect(x, y, 20, 20, false);
          //qui non riesco a compilare il codice per visualizzare le immagini
          //graphics.drawImage(.....)
       }
    }
    Grazie mille

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

    Re: [JAVA] Inserire immagini

    Originariamente inviato da esploratore8
    Ciao a tutti come faccio ad inserire al posto dei quadrati delle immagini diverse l'una dall'altra
    Allora ogni oggetto Characters dovrebbe avere la "sua" immagine. Innanzitutto sai come si possono caricare immagini? Un modo molto semplice (non l'unico ... ci sono altri sistemi) è usare il metodo read() della classe javax.imageio.ImageIO (vedi documentazione javadoc).

    Quando istanzi un Characters passerai al costruttore anche il BufferedImage della immagine caricata, che chiaramente va assegnato ad una variabile di istanza. A quel punto nel tuo draw() puoi usare la immagine.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ho risolto cosi:



    codice:
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.util.LinkedList;
    
    import javax.swing.JFrame;
    
    
    public class Main {
    
       private JFrame frame;
       
       public Main() {
          frame =  new JFrame("Piove");
          frame.setSize(new Dimension(300,300));
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setLayout(new BorderLayout());
          frame.getContentPane().add(getFilledCPanel(),BorderLayout.CENTER);
          
          frame.setVisible(true);
       }
       
       private Component getFilledCPanel() {
          CustomPanel panel = null;
          LinkedList<Characters> list = new LinkedList<Characters>();
          for (int i = 0; i < 4; i++) {
             list.add(new Characters((i*40),0,panel));
          }
          panel = new CustomPanel(list);
          for (Characters characters : list) {
             characters.start();
          }
          return panel;
       }
    
       public static void main(String[] args) {
          new Main();
       }
    }


    codice:
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.util.LinkedList;
    
    import javax.swing.JPanel;
    
    public class CustomPanel extends JPanel {
       
       private LinkedList<Characters> list;
       
       public CustomPanel() {
          setSize(new Dimension(300,300));
          setBackground(Color.white);
       }
    
       public CustomPanel(LinkedList<Characters> a){
          this();
          list = a;
       }
       @Override
       protected void paintComponent(Graphics g) {
          super.paintComponent(g);
          for (Characters c : list) {
             c.draw(g);
          }
          repaint();
       }
    }


    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.awt.image.BufferedImage;

    import javax.swing.JFrame;
    import javax.swing.JPanel;

    public class Characters extends Thread {
    private int x;
    private int y;
    private JPanel frame;
    private Image im;
    public Characters(int a,int b) {
    x = a;
    y = b;
    im = Toolkit.getDefaultToolkit().getImage ("/Users/federicobarassi/NetBeansProjects/OK/src/ok/java6.gif");
    }

    public Characters(int i, int j, JPanel frame) {
    this(i,j);
    this.frame = frame;
    }

    @Override
    public void run() {
    for (int i = 0; i < 15; i++) {
    y += i;
    try {
    Thread.sleep(200);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    }

    public void draw(Graphics graphics){
    graphics.setColor(Color.BLACK);

    //qui metti l imagel
    //graphics.drawImage(.....)
    graphics.drawImage(im, x, y,frame);
    }

    }

    Però mi scende una sola immagine, io avrei bisogno che ne scendano di più diverse l'una dall'altra e di piccola dimensione come faccio ??? Avrei bisogno anche che il tutto si ripeta all'infinito (In loop).

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da esploratore8
    Però mi scende una sola immagine, io avrei bisogno che ne scendano di più diverse l'una dall'altra e di piccola dimensione come faccio ???
    Faccio un'altra domanda: vuoi che mentre la immagine scende cambi ... o vuoi che per una certa istanza di Characters sia sempre la stessa?? In quest'ultimo caso, rileggi quanto ho suggerito sopra!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Sarebbe bello farle cambiare velocemente ogni mezzo secondo. Ti spiego la mia idea cosi riesci a capire il risultato che ho in testa : Vorrei far cadere a pioggia i personaggi storici dei videogame (scegliendo delle immagini che li ritraggono, di piccola dimensione) in modo frenetico ( mandando il tutto in loop in modo che si ripeta all'infinito), e se è possibile farli spiaccicare a terra con un suono. Per ora sono ancora in alto mare.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da esploratore8
    Sarebbe bello farle cambiare velocemente ogni mezzo secondo. Ti spiego la mia idea cosi riesci a capire il risultato che ho in testa : Vorrei far cadere a pioggia i personaggi storici dei videogame (scegliendo delle immagini che li ritraggono, di piccola dimensione) in modo frenetico
    Ok però vorrei che avessi un po' più chiaro quello che deve avere (nel senso di dati da "possedere") e fare Characters! Ovvero: Characters è la tua classe che deve disegnare il personaggio e fin qui non ci piove. Ma allora vuoi che abbia una lista di immagini? Tali immagini devono essere ciclate in loop in modo sequenziale? O prendendone una a caso ad ogni cambiamento?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Andrebbe bene anche se ne prendesse una a caso ogni cambiamento sarebbe ancora più dinamico

  8. #8
    comunque per il resto hai capito perfettamente

  9. #9
    ti prego risp

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.