Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Come visualizzare un'immagine usando Swing? Non mi funziona...

    Ciao,
    ho scritto questo semplice codice che implementa una classe con il metodo main che dovrebbe visualizzare un'immagine usando le Swing ma di fatto non mi funziona.

    Come ambiente di sviluppo uso Eclipse e non vorrei che ci fosse qualche problema di riferimenti al percorso relativo dell'immagine da aprire che magari viene risolto in modo strano quando lancio la mia applicazione da Eclipse facendo Run as --> Java Application

    codice:
    package andrea.blur1.classi;
    
    import java.awt.BorderLayout;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.awt.image.BufferedImageOp;
    import java.awt.image.ConvolveOp;
    import java.awt.image.Kernel;
    import java.io.File;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
    import javax.management.ImmutableDescriptor;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JScrollPane;
    
    public class blur1 {
    	
    	public static void main(String [] args) throws IOException{
    		
    		String strFolderPath = "/home/andrea/Scrivania/";			// Percorso immagine da aprire
    		String strFileName = "pesce-pagliaccio.jpg";				// Nome file immagine da aprire
    		
    		File imagePath = new File(strFolderPath, strFileName);	
    		// Contiene il riferimento al file da aprire
    		System.out.println("imagePath punta a: " + imagePath);
    		
    		Image image = ImageIO.read(imagePath);						// Mette dentro image l'immagine a cui fà riferimento imagePath
    		System.out.println("Info immagine: " + image.toString());
    		
    		JLabel picture = new JLabel(new ImageIcon(image));			// Istanzio un'ImageIcon da image e la uso come icona in una JLabel
    		
    		JFrame frame = new JFrame("blablabla");						// E' un container
    		JScrollPane picturePane = new JScrollPane(picture);			// E' una view scrollabile che contiene la JLabel che ha l'ImageIcon come icona
    		System.out.println(picturePane.toString());
    		// Setta le scrollbar verticale ed orizzontale:
    		picturePane.getVerticalScrollBar().setUnitIncrement(18);
    		picturePane.getHorizontalScrollBar().setUnitIncrement(18);
    		
    		frame.add(picturePane, BorderLayout.CENTER);				// Aggiunco il picturPane al frame esterno e gli dico di posizionarlo al centro
    		System.out.println(frame.getComponentCount());
    	}
    
    }
    Non ne riesco proprio ad uscire...credo sia una cavolata...qualcuno che mi aiuta?

    Grazie mille
    Andrea

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    codice:
    frame.getContentPane().add(...);
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Originariamente inviato da Andrea1979
    codice:
    frame.getContentPane().add(...);
    mmm ho sostituito questa riga di codice:
    codice:
    frame.add(picturePane, BorderLayout.CENTER);
    con questa riga:
    codice:
    frame.getContentPane().add(picturePane, BorderLayout.CENTER);
    ma all'atto pratico non cambia nulla...faccio partire il programma da Eclipse e non si visualizza l'immagine mentre nella console appaiono i valori generati dai System.out.println che sono i seguenti:

    codice:
    imagePath punta a: /home/andrea/Scrivania/pesce-pagliaccio.jpg
    Info immagine: BufferedImage@59bca5f1: type = 5 ColorModel: #pixelBits = 24 numComponents = 3 color space = java.awt.color.ICC_ColorSpace@70329f3d transparency = 1 has alpha = false isAlphaPre = false ByteInterleavedRaster: width = 500 height = 375 #numDataElements 3 dataOff[0] = 2
    javax.swing.JScrollPane[,0,0,0x0,invalid,layout=javax.swing.ScrollPaneLayout$UIResource,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.metal.MetalBorders$ScrollPaneBorder@e60e128,flags=328,maximumSize=,minimumSize=,preferredSize=,columnHeader=,horizontalScrollBar=javax.swing.JScrollPane$ScrollBar[,0,0,0x0,invalid,layout=javax.swing.plaf.metal.MetalScrollBarUI,alignmentX=0.0,alignmentY=0.0,border=,flags=4194632,maximumSize=,minimumSize=,preferredSize=,blockIncrement=10,orientation=HORIZONTAL,unitIncrement=1],horizontalScrollBarPolicy=HORIZONTAL_SCROLLBAR_AS_NEEDED,lowerLeft=,lowerRight=,rowHeader=,upperLeft=,upperRight=,verticalScrollBar=javax.swing.JScrollPane$ScrollBar[,0,0,0x0,invalid,layout=javax.swing.plaf.metal.MetalScrollBarUI,alignmentX=0.0,alignmentY=0.0,border=,flags=4194632,maximumSize=,minimumSize=,preferredSize=,blockIncrement=10,orientation=VERTICAL,unitIncrement=1],verticalScrollBarPolicy=VERTICAL_SCROLLBAR_AS_NEEDED,viewport=javax.swing.JViewport[,0,0,0x0,invalid,layout=javax.swing.ViewportLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=25165832,maximumSize=,minimumSize=,preferredSize=,isViewSizeSet=false,lastPaintPosition=,scrollUnderway=false],viewportBorder=]
    1
    Come mai? sicuro che non dipenda da come viene visto l'indirizzo del file da dentro Eclipse?

    Tnx
    Andrea

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    non ho idea di cosa combini Eclipse (viva notepad).
    Quello che di sicuro manca lì è un setVisible sul JFrame contenitore (te non è che non vedi l'immagine, con quel codice lì non dovresti vedere proprio niente)...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Originariamente inviato da Andrea1979
    non ho idea di cosa combini Eclipse (viva notepad).
    Quello che di sicuro manca lì è un setVisible sul JFrame contenitore (te non è che non vedi l'immagine, con quel codice lì non dovresti vedere proprio niente)...

    mmm allora mettendo così dentro Eclipse:

    codice:
    String strFolderPath = "/home/andrea/workspace2/blur1/img/";						// Percorso immagine da aprire
    		String strFileName = "pesce-pagliaccio.jpg";				// Nome file immagine da aprire
    Non solo non tira fuori l'eccezione che non riesce ad aprire il file jpg (eccezione che tira fuori quando gli metto un altro percorso...quindi mi viene da pensare che ora il file jpg sia correttamente caricato...penso almeno) ma mi apre anche una casellina nella barra delle applicazioni aperte con la scritta blablabla (che sarebbe la stringa passata nella costruzione del Jframe) però se ci clicko sopra non succede nulla...non mi visualizza un bel nulla...devo settare qualche altro setVisible per caso?

    Please help me che stò uscendo matto per questa cavolata...

    Tnx
    Andrea

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    te l'ho detto sopra... il tuo JFrame è invisibile secondo quel codice... alla fine del blocco try metti un
    codice:
    frame.setVisible(true);
    altrimenti non vedrai mai e poi mai nulla.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Originariamente inviato da Andrea1979
    non ho idea di cosa combini Eclipse (viva notepad).
    Quello che di sicuro manca lì è un setVisible sul JFrame contenitore (te non è che non vedi l'immagine, con quel codice lì non dovresti vedere proprio niente)...
    si infatti...però ora vedo la casellina del JFrame nella barra delle applicazioni aperte ma se ci clicko sopra non succede niente e non visualizza niente (il file jpg credo sia stato correttamente caricato visto che non tira sù nessuna eccezione...se avesse problemi a caricarlo dovrebbe darmi un'eccezione...giusto?)

    Non è che devo settare qualche altro setVisible? Qualche idea? Al posto precedente ho messo l'ultima versione del mio codice...please help me... :-(

  8. #8
    Originariamente inviato da Andrea1979
    te l'ho detto sopra... il tuo JFrame è invisibile secondo quel codice... alla fine del blocco try metti un
    codice:
    frame.setVisible(true);
    altrimenti non vedrai mai e poi mai nulla.
    ma ce l'ho messo...come puoi vedere tu stesso quì: l'ultima istruzione è proprio quella !!! Però appunto mi appare la casellina con la scritta "blablabla" nella barra delle applicazioni aperte ma se ci clicko sopra non succede nulla e non si visualizza nulla...

    codice:
    import java.awt.BorderLayout;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.awt.image.BufferedImageOp;
    import java.awt.image.ConvolveOp;
    import java.awt.image.Kernel;
    import java.io.File;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
    import javax.management.ImmutableDescriptor;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JScrollPane;
    
    public class blur1 {
    	
    	public static void main(String [] args) throws IOException{
    		
    		String strFolderPath = "/home/andrea/workspace2/blur1/img/";						// Percorso immagine da aprire
    		String strFileName = "pesce-pagliaccio.jpg";				// Nome file immagine da aprire
    		
    		File imagePath = new File(strFolderPath, strFileName);	
    		// Contiene il riferimento al file da aprire
    		System.out.println("imagePath punta a: " + imagePath);
    		
    		Image image = ImageIO.read(imagePath);						// Mette dentro image l'immagine a cui fà riferimento imagePath
    		System.out.println("Info immagine: " + image.toString());
    		
    		JLabel picture = new JLabel(new ImageIcon(image));			// Istanzio un'ImageIcon da image e la uso come icona in una JLabel
    		
    		JFrame frame = new JFrame("blablabla");						// E' un container
    		
    		
    		JScrollPane picturePane = new JScrollPane(picture);			// E' una view scrollabile che contiene la JLabel che ha l'ImageIcon come icona
    		System.out.println(picturePane.toString());
    		// Setta le scrollbar verticale ed orizzontale:
    		picturePane.getVerticalScrollBar().setUnitIncrement(18);
    		picturePane.getHorizontalScrollBar().setUnitIncrement(18);
    		
    		frame.getContentPane().add(picturePane, BorderLayout.CENTER);				// Aggiunco il picturPane al frame esterno e gli dico di posizionarlo al centro
    		
    		System.out.println(frame.getComponentCount());
    		frame.setVisible(true);
    	}
    
    }
    Intendevi così o sbaglio qualcosa?

    Tnx
    Andrea

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    devi anche dargli una dimensione...
    codice:
    frame.setSize(400,400)
    per esempio.

    Poi ti consiglierei di estendere JFrame, qualcosa del genere:
    codice:
    import javax.swing.*;
    import java.io.*;
    import javax.imageio.*;
    import java.awt.*;
    
    public class ImageIconTest extends JFrame {
        
        public ImageIconTest() {
            super("Test Panel");
            this.setSize(800,800);
            
            try {            
                File file = new File("C:/Users/Andrea/Desktop/", "198995_1020_A.jpg");        
                Image image = ImageIO.read(file);
                JLabel label = new JLabel(new ImageIcon(image));
                JScrollPane pane = new JScrollPane(label);
                this.getContentPane().add(pane, BorderLayout.CENTER);
            }
            catch (Exception e) {
                this.getContentPane().add(new JTextArea(e.getMessage()));
            }
            
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }
        
        public static void main (String[] args) {
            new ImageIconTest();
        }
        
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Originariamente inviato da Andrea1979
    devi anche dargli una dimensione...
    codice:
    frame.setSize(400,400)
    per esempio.

    Poi ti consiglierei di estendere JFrame, qualcosa del genere:
    codice:
    import javax.swing.*;
    import java.io.*;
    import javax.imageio.*;
    import java.awt.*;
    
    public class ImageIconTest extends JFrame {
        
        public ImageIconTest() {
            super("Test Panel");
            this.setSize(800,800);
            
            try {            
                File file = new File("C:/Users/Andrea/Desktop/", "198995_1020_A.jpg");        
                Image image = ImageIO.read(file);
                JLabel label = new JLabel(new ImageIcon(image));
                JScrollPane pane = new JScrollPane(label);
                this.getContentPane().add(pane, BorderLayout.CENTER);
            }
            catch (Exception e) {
                this.getContentPane().add(new JTextArea(e.getMessage()));
            }
            
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }
        
        public static void main (String[] args) {
            new ImageIconTest();
        }
        
    }
    ok...settando anche la size ora funziona !!! Grazie mille

    In pratica con questo secondo codice stai andando ad estendere il JFrame contenitore settando al proprio interno tutte le varie caratteristiche come dimensioni, riferimenti al file da caricare, settaggi come il fatto che si tratta di un JFrame scrollabbile, etcetc...e poi dici di usare questa nuova classe all'interno del main?

    Beh si mi sembra più razionale come cosa...

    Grazie mille per le dritte...in realtà ora come ora le Swing mi servono poco...per ora mi servono solo per visualizzare delle immagini di prova (immagini a cui vorrei cercare di applicare dei filtri...) ma poi il tutto vorrei passarlo su piattaforma Android quindi a quel punto non mi serviranno ed almeno per ora non prevedo di approfondire troppo =)

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.