Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Aiuto immagine di sfondo su JWindow
Forum - Java - Aiuto immagine di sfondo su JWindow

Avatar
Sevenjeak (Normal User)
Pro


Messaggi: 91
Iscritto: 03/01/2012

Segnala al moderatore
Postato alle 12:45
Sabato, 25/02/2012
Sto, in questi giorni, creando un'applicazione java con una splash screen ( una JWindow ).

Sto cercando di impostare un'immagine di sfondo aggiungendo il metodo paintComponent() alla classe della mia splash screen, che ovviamente estende JWindows, il metodo paintComponent() lo dichiarato in questo modo:

Codice sorgente - presumibilmente Java

  1. public void paintComponent(Graphics g)
  2. {      
  3.    Image bg = getToolkit().createImage("logo.png");
  4.    g.drawImage(bg, 0, 0, this);
  5.            
  6.    super.paintComponents(g);
  7. }



Ma niente, non funziona, o provato a vedere se andasse bene il metodo disegnando una semplice riga e in effetti mi disegna la riga, o provato a verificare se il file logo.png esistesse ed esiste, non saprei, qual'è il problema?

EDIT:

Ora spiego meglio, la mia applicazione e divisa in package, e ho la classe per creare una splash screen, presa da internet e da me modificata, dichiarata in questo modo:

Codice sorgente - presumibilmente Java

  1. public class Splash extends JWindow implements ActionListener {
  2.        
  3.     /**
  4.          *
  5.          */
  6.         private static final long serialVersionUID = 1L;
  7.         JFrame win = null;
  8.        
  9.         public void showSplashAndExit(JFrame win)
  10.     {
  11.            this.win = win;
  12.            bImage content = (bImage)getContentPane();
  13.            setSize(150, 100);
  14.            setLocationRelativeTo(null);
  15.            JLabel label = new JLabel("Loading..");
  16.            
  17.            content.add(label, BorderLayout.CENTER);
  18.            setVisible(true);
  19.                    
  20.            Timer timer = new Timer(3000, this);
  21.            timer.start();
  22.         }
  23.        
  24.         public void actionPerformed(ActionEvent e) {
  25.                 dispose();
  26.                 win.setVisible(true);
  27.         }
  28. }



Evitando di scrivere l'import, non saprei come integrare il tuo codice in questa classe, ho già provato in precedenza ad estendere, sopra a questa classe, la classe JPanel, come fai te, ma non riesco, come potrei integrare il tuo codice, utilizzando sempre il codice che ho io ora, ho dovrei cambiarlo?

Ultima modifica effettuata da Sevenjeak il 25/02/2012 alle 13:23
PM
Avatar
bububs (Normal User)
Expert


Messaggi: 253
Iscritto: 11/03/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 12:54
Sabato, 25/02/2012
Ecco qui come potresti fare:
Codice sorgente - presumibilmente Java

  1. import java.awt.*;
  2. import javax.swing.*;
  3.  
  4. public class BackgroundImage extends JPanel {
  5.  
  6.   private Image img;
  7.  
  8.   public BackgroundImage() {
  9.     img = Toolkit.getDefaultToolkit().createImage("logo.png");
  10.     loadImage(img);
  11.   }
  12.  
  13.   private void loadImage(Image img) {
  14.     try {
  15.       MediaTracker track = new MediaTracker(this);
  16.       track.addImage(img, 0);
  17.       track.waitForID(0);
  18.     } catch (InterruptedException e) {
  19.       e.printStackTrace();
  20.     }
  21.   }
  22.  
  23.   protected void paintComponent(Graphics g) {
  24.     setOpaque(false);
  25.     g.drawImage(img, 0, 0, null);
  26.     super.paintComponent(g);
  27.   }
  28.  
  29.   public static void main(String... argv) {
  30.     JWindows frame = new JWindows("Immagine Di Sfondo");
  31.     BackgroundImage back = new BackgroundImage();
  32.     frame.getContentPane().add(back);
  33.     frame.setSize(400, 287);
  34.     frame.setVisible(true);
  35.   }
  36. }


Ultima modifica effettuata da bububs il 25/02/2012 alle 12:55
Non riesco, ho editato il mio precedente messaggio, visto che, non sono sicuro che, nei commenti si possono inserire i codici. - Sevenjeak - 25/02/12 13:24
Prima di poter pensare all'applicazione del mio metodo e adattarlo al tuo, avrei pensato ad una altro metodo alternativo e molto semplice: segui il mio ragionamento. - bububs - 25/02/12 15:15
potresti semplicemente creare una JLaebel ke conterrà l'immagine si sfondo che avrà le dimensioni della tua JWindow. Mettendola al primo posto in teoria tutti gli elementi che verranno dopo dovrebbero essere in primo piano rispetto a quella contenente lo sfondo. Prova questo metodo e fammi sapere. - bububs - 25/02/12 15:18
Bhe.. premetto che non ho mai inserito un'immagine di sfondo ad una JLabel, ma se intendi inserirla con il metodo setIcon() allora me la fa mettere, altrimenti non saprei come fare - Sevenjeak - 25/02/12 17:22
Certo in tendo in quel senso. Fai così: crea una JLabel mettendo con setIcon() l'immagine. Dopo imposta le sue dimensioni con le stesse della JWindow. Dimmi quando hai fatto e se ti esce. - bububs - 25/02/12 17:32
Si, va tutto bene cosi, grazie. - Sevenjeak - 25/02/12 19:38
Figurati ;) - bububs - 26/02/12 11:25
Figurati ;) - bububs - 26/02/12 11:33
PM