Flickr Bilder in Gui Oberfläche

Stephan2009

Aktives Mitglied
Hallo zusammen,

ich würde gern wissen wie ich es am besten anstelle das ich Fotos aus Flickr in einer Java Gui anzeigen lassen kann. Bis jetzt ist es so das ich mit dem Rest aufruf der Flickr API nach bestimmten Fotos (Metadaten) suche und speicher mir das Ergebnis als XML. Ich weiß das die Darstellung des Bildes mit Hilfe der ID, Secret, Server im Browser dargestellt werden kann. Mein Ziel ist es aber das alle Fotos (z.B. 10 Stück) in meiner Java Oberfläche angezeigt werden. Füt Hilfe bin ich dankbar.
 

Stephan2009

Aktives Mitglied
Hallo, ich habe zwei Klassen einmal die FlickrPhoto deren Aufgabe es ist per Rest Aufruf die Fotos aufzurufen und ich setze sie am Ende des Codes zusammen als URL siehe hier

Java:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Desktop;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.beans.XMLDecoder;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;

import org.xml.sax.InputSource;

import java.io.*;
import java.net.*;
import java.util.*;

public class FlickrPhoto {
	
	
	public static void main(String args[]) throws Exception{
    	
		 
    	
        URLConnection connection = new URL("http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=a750a873fbd6a892f2965a8601a0a2be&sort=date-posted-asc&per_page=100&tags=Polizei,Feuerwehr&text=Polizei+Love Parade+Feuerwehr+Katastrophen+Unfälle").openConnection();
        
        DataInputStream dis = new DataInputStream(connection.getInputStream());
        
        FileWriter fw = new FileWriter(new File("Hello.xml"));
        
        BufferedReader read=new BufferedReader(new InputStreamReader(dis));
        
        String nextline;
        
        String[] servers = new String[100];
        String[] ids = new String[100];
        String[] secrets = new String[100];
        while ((nextline = read.readLine()) != null) { 
            
        	fw.append(nextline);
     
            
            // Zeigt mir als String alle Fotos mit Attributen an
            System.out.println(nextline);
        }
        dis.close();
        fw.close();
        
        String filename = "Hello.xml";
        XMLInputFactory factory = XMLInputFactory.newInstance();
        System.out.println("FACTORY: " + factory);

        XMLEventReader r = factory.createXMLEventReader(filename, new FileInputStream(filename));
        int i = -1;
        while (r.hasNext()) {

            XMLEvent event = r.nextEvent();
            if (event.isStartElement()) {
                StartElement element = (StartElement) event;
                String elementName = element.getName().toString();
                if (elementName.equals("photo")) {
                    i++;
                    Iterator iterator = element.getAttributes();

                    while (iterator.hasNext()) {

                        Attribute attribute = (Attribute) iterator.next();
                        QName name = attribute.getName();
                        String value = attribute.getValue();
                        System.out.println("Attribute name/value: " + name + "/" + value);
                        if ((name.toString()).equals("server")) {
                            servers[i] = value;
                            System.out.println("Server Value" + servers[0]);
                        }
                        if ((name.toString()).equals("id")) {
                            ids[i] = value;
                        }
                        if ((name.toString()).equals("secret")) {
                            secrets[i] = value;
                        }
                    }
                }
            }
        }
        System.out.println(i);
        String flickrurl = "http://static.flickr.com/" + servers[i] + "/" + ids[i] + "_" + secrets[i] + ".jpg";
        
            // baut die URL aller Fotos zusammen
        	URI uri = new URI(flickrurl);
        	ImageIcon icon=new ImageIcon(flickrurl);
        
    }
}

Die zweite Klasse ist die Gui
Java:
public class PhotoApp extends JFrame{
	
	
	public PhotoApp() {
		super("Aggregierte Fotos aus Flickr");
		
		Container cont=getContentPane();
		// Vorlage
		JPanel panel1=new JPanel();
		
		// Folie auf Vorlage
		JLabel label1=new JLabel();
		    	    
		panel1.add(label1);
	    //Vorlage auf Container
		cont.add(panel1,BorderLayout.CENTER);
	}      
		        	
	
	public static void main(String args[]) {
		
		
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                PhotoApp app = new PhotoApp();
                app.setSize(400, 400);
                app.setVisible(true);
                app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }
        });
    }
	    	
}

Wie übergebe ich der Gui nun am besten die Bilder ? Viele Dank
 

Michael...

Top Contributor
Pack doch das was in FlickrPhoto in der main steckt in eine Methode, welche die URLs oder ImageIcons zurückgibt. Die GUI bekommt oder erzeugt sich eine Instanz dieser Klasse und benutzt die Methode um die URLs oder ImageIcons zu holen. Quick & Dirty wäre diese Methode direkt in der GUI Klasse zu implementieren.
 

Stephan2009

Aktives Mitglied
Danke schonmal für deine Tipps aber ich bin mir noch etwas unschlüssig bei der vorgehensweise, ich habe mit System.out.println probiert alles klappt bei der Ausgabe und er zeigt mir auch die zusammengesetzten Strings als URL aus, wenn ich die im Browser eingebe kommt auch das Foto. Problem ist bei mir 1. wie setz ich die Methode auf bzw welchen Rückgabewert soll sie haben und 2. sollte ich die Strings (URL's) Zwischenspeichern im Array um alle Foto URL's in der Gui anzeigen zu können .
 

Michael...

Top Contributor
Problem ist bei mir 1. wie setz ich die Methode auf bzw welchen Rückgabewert soll sie haben
liegt an Dir und Deinen Anforderungen die Methode kann ein ImageIcon oder URL zurückliefern oder gleiche alle URLs/ImageIcons als Array bzw. List
sollte ich die Strings (URL's) Zwischenspeichern im Array um alle Foto URL's in der Gui anzeigen zu können.
Wäre eine Möglichkeit, vor allem wenn man zu eine späteren Zeitpunkt noch einmal darauf zugreifen will.
 

Stephan2009

Aktives Mitglied
So bin jetzt schonmal einen Schritt weiter und zwar ist hier die Methode der einen Klasse
Java:
public static ArrayList<URL> fetchImage() throws Exception{
    	
    	URLConnection connection = new URL("http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=a750a873fbd6a892f2965a8601a0a2be&sort=date-posted-asc&per_page=10&tags=Polizei,Feuerwehr&text=Polizei+Love Parade+Feuerwehr+Katastrophen+Unfälle").openConnection();
        
        DataInputStream dis = new DataInputStream(connection.getInputStream());
        
        FileWriter fw = new FileWriter(new File("Hello.xml"));
        
        BufferedReader read=new BufferedReader(new InputStreamReader(dis));
        
        String nextline;
        
        String[] servers = new String[100];
        String[] ids = new String[100];
        String[] secrets = new String[100];
        while ((nextline = read.readLine()) != null) { 
            
        	fw.append(nextline);
     
            
            // Zeigt mir als String alle Fotos mit Attributen an
            System.out.println(nextline);
        }
        dis.close();
        fw.close();
        
        String filename = "Hello.xml";
        XMLInputFactory factory = XMLInputFactory.newInstance();
        //System.out.println("FACTORY: " + factory);

        XMLEventReader r = factory.createXMLEventReader(filename, new FileInputStream(filename));
        int i = 0;
        while (r.hasNext()) {

            XMLEvent event = r.nextEvent();
            if (event.isStartElement()) {
                StartElement element = (StartElement) event;
                String elementName = element.getName().toString();
                if (elementName.equals("photo")) {
                    i++;
                   
					Iterator iterator = element.getAttributes();

                    while (iterator.hasNext()) {

                        Attribute attribute = (Attribute) iterator.next();
                        QName name = attribute.getName();
                        String value = attribute.getValue();
                        //System.out.println("Attribute name/value: " + name + "/" + value);
                        if ((name.toString()).equals("server")) {
                            servers[i] = value;
                            //System.out.println("Server Value" + servers[0]);
                        }
                        if ((name.toString()).equals("id")) {
                            ids[i] = value;
                        }
                        if ((name.toString()).equals("secret")) {
                            secrets[i] = value;
                        }
                    }
                }
            }
        
        //System.out.println(i);
            	
            
        }
		
		String flickrurl = "http://static.flickr.com/" + servers[i] + "/" + ids[i] + "_" + secrets[i] + ".jpg";
        
        // baut die URL aller Fotos zusammen
    	URL u = new URL(flickrurl);
    	
    	ArrayList<URL> list=new ArrayList<URL>();
    	list.add(u);
    	for (int j=0; j<list.size();j++){
    	
    	}

Und hier die Gui er zeigt mir zumindest jetzt das Foto als URL an aber nicht das Bild selber wie kann ich das machen :)
Java:
public class PhotoApp extends JFrame{
	
	FlickrPhoto photo=new FlickrPhoto();
	
	
	public PhotoApp() throws Exception  {
		super("Aggregierte Fotos aus Flickr");
		
	    Container cont=getContentPane();
	
		JPanel panel1=new JPanel();
		
		JLabel label1=new JLabel(photo.fetchImage().toString());
		    	    
		panel1.add(label1);
	
		cont.add(panel1,BorderLayout.CENTER);
	
	}      
		        	
	
	public static void main(String args[]) {
		
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                PhotoApp app = null;
				try {
					app = new PhotoApp();
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
                app.setSize(400, 400);
                app.setVisible(true);
                app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }
        });
    }
 

Michael...

Top Contributor
Du gibst ja hier eine ArrayList mit nur einer URL zurück. Sollte diese nicht innerhalb der Schleife befüllt werden (statt der Arrays server, ids und secrets)?
In der GUI kannst Du dann natürlich nicht die ArrayList in ein JLabel stecken und die Stringdarstellung nutzt auch nicht viel ;-)
Du musst ja die URLs - z.B. in einer Schleife - rausholen und JLabels übergeben.
z.B.:
Java:
...
List<URL> imgList = photo.fetchImage();
...
JLabel label = new JLabel(imgList.get(0));
...
um die erste URL der Liste an ein JLabel zu übergeben.
 

Michael...

Top Contributor
Sorry, die URL muss natürlich von eine ImageIcon geladen werden - soll ja als Bild dargestellt werden.
Java:
JLabel label = new JLabel(new ImageIcon(imgList.get(0)));
 

Stephan2009

Aktives Mitglied
Vielen Dank es funktioniert , das einzige Problem was ich jetzt noch habe ist das nur 1 Bild angezeigt wird ich aber max 10 angezeigt werden will irgendwo muss ich da noch was falsch haben
 

Michael...

Top Contributor
Zum Anzeigen von zehn Bildern brauchst Du natürlich zehn JLabel.
Allerdings liefert - wie bereits - angemerkt die Methode fetchImage() eine ArrayList mit nur einer URL als Eintrag. Statt die Informationen in den Arrays (s. Post oben) zwischen zu speichern, würde es ja ausreichen eine Variable server, id und secret zu puffern zu nutzen, um dann die URL unmittelbar für jedes Element zu erzeugen und in die Liste einzufügen.

Bei mir ist es mittlerweile über zehn Jahre her, dass ich mich mit Java und XML intensiver auseinandergesetzt habe, aber gibt es da nicht andere Möglichkeiten als mit einer inneren Schleife über die Attribute zu iterieren?
Wenn nein würde ich persönlich da eher RegEx anwenden, aber das dürfte für Dich die Sache wohl eher komplizierter machen.
 

Stephan2009

Aktives Mitglied
Hmm es ist ja so das ich durch den REST Aufruf in der Flickr API festlege das ich zum Beispiel 10 Bilder mit bestimmten Metadaten suche diese werden dann als XML gespeichert. Wenn ich jetzt 100 Bilder anzeigen möchte dann muss ich 100 JLAbels haben?
 

Stephan2009

Aktives Mitglied
hmm ok werd mir das mit dem JTable mal anschauen , kannst du mir ein Beispiel geben wie du das meinst mit den Puffern von ID, Secret wie du das meinst
 

Michael...

Top Contributor
Kann man nicht direkt per StartElement#getAttributeByName(QName) die gesuchten Attribute auslesen? Dann könnte man sich das Iterieren über alle Attribute sparen.

So in etwa meinte ich das:
Java:
		...
		// Die String Arrays rausschmeißen
		List<URL> urlList = new ArrayList<URL>();
		while (r.hasNext()) {
            XMLEvent event = r.nextEvent();
            if (event.isStartElement()) {
                StartElement element = (StartElement) event;
                String elementName = element.getName().toString();
                if (elementName.equals("photo")) {
                   
                    Iterator iterator = element.getAttributes();
                    
                    // Hier die String Puffer deklarieren
                    String server, id, secret;
                    
                    while (iterator.hasNext()) {
                        Attribute attribute = (Attribute) iterator.next();
                        QName name = attribute.getName();
                        String value = attribute.getValue();
                        
                        if ((name.toString()).equals("server")) 
                            server = value;
                        if ((name.toString()).equals("id")) 
                            id = value;
                        if ((name.toString()).equals("secret"))
                            secret = value;
                        
                        //direktes Erzeugen und Speichern der URL in der List
                        if (server!=null && id!=null && secret!=null) 
                        	urlList.add(new URL("http://static.flickr.com/" + server + "/" + id + "_" + secret + ".jpg"));
                    }
                }
            } 
        }
        ...
 

Stephan2009

Aktives Mitglied
Danke für deine Hilfe aber ich bekomme eine Fehlermeldung bei dem Vergleich server!=null , id!=null ... das die Variablen intialisiert werden sollten :(
 

Michael...

Top Contributor
War ja nur so dahin geschrieben...
Man kann (Objekt)Variablen auch mit null initialisieren.
Java:
String server=null, id=null, secret=null;
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Mit dem Scene Builder eine Collage erstellen (Bilder beziehen aus Flickr) AWT, Swing, JavaFX & SWT 1
R Flickr-Flickr4Java Anfänger AWT, Swing, JavaFX & SWT 2
MiMa Fonts, Icons, Bilder in JavaFX Anwendung AWT, Swing, JavaFX & SWT 5
F Bilder zu ausführbarer Jar-Datei hinzufügen AWT, Swing, JavaFX & SWT 5
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5
Linjutsu Den Inhalten aus einer ArrayList Bilder zuweisen (Kartenspiel) AWT, Swing, JavaFX & SWT 8
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
S AffineTranformation Bilder verschwinden von Anzeige bei Pan, Zoom AWT, Swing, JavaFX & SWT 6
G Bilder in javafx Project AWT, Swing, JavaFX & SWT 11
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
N eclipse Java, bilder benutzten Funktioniert nicht AWT, Swing, JavaFX & SWT 6
Kirby.exe Bilder in GUI einfügen AWT, Swing, JavaFX & SWT 8
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
L Bilder werden in exportierter Datei nicht geladen AWT, Swing, JavaFX & SWT 6
C Bilder so einbinden, dass sie sich ändern AWT, Swing, JavaFX & SWT 6
J Bilder aus dem SceneBuilder werden in der Jar nicht dargestellt AWT, Swing, JavaFX & SWT 4
TheWhiteShadow JavaFX Bilder werden ungewollt Skaliert AWT, Swing, JavaFX & SWT 1
B JavaFX Bilder in einem Gewissen bereich halten AWT, Swing, JavaFX & SWT 1
J Bilder proportional verkleiner AWT, Swing, JavaFX & SWT 12
E Bilder skalieren AWT, Swing, JavaFX & SWT 4
DaCrazyJavaExpert Swing Bilder überlagern AWT, Swing, JavaFX & SWT 19
A Bilder als Hintergrund AWT, Swing, JavaFX & SWT 2
@SupressWarnings() JavaFX Bilder in executable jar laden AWT, Swing, JavaFX & SWT 5
Sugan JavaFX Bilder drucken AWT, Swing, JavaFX & SWT 0
K JPanel Bilder bei Windows nicht darstellbar AWT, Swing, JavaFX & SWT 6
Sugan Java FX Verzeichnisüberwachung -> Bilder auf GUI anzeigen AWT, Swing, JavaFX & SWT 4
E AWT Bilder als "Array" abspeichern. AWT, Swing, JavaFX & SWT 4
MrSnake Bilder aus Unterordner einfügen AWT, Swing, JavaFX & SWT 2
I 2D-Grafik Bilder Eingefügt, button jetzt im Hintergrund AWT, Swing, JavaFX & SWT 2
C SWT Treeview mit Bilder im Label verändert Expanded Icon AWT, Swing, JavaFX & SWT 1
M Swing JTextPane, Bilder und Text-flow AWT, Swing, JavaFX & SWT 2
thet1983 JTable Bilder AWT, Swing, JavaFX & SWT 6
GenerationLost Bilder an bestimmten Platz einfügen/Objekte visualisieren AWT, Swing, JavaFX & SWT 1
F Bilder in jFrame einfügen AWT, Swing, JavaFX & SWT 3
J Bilder als Variable an einem Objekt speichern AWT, Swing, JavaFX & SWT 3
I Swing Bilder werden nach Export nicht angezeigt AWT, Swing, JavaFX & SWT 1
D 2D-Grafik Bilder anzeigen AWT, Swing, JavaFX & SWT 4
J Bilder auf JPanel (im JScrollPane) nacheinander laden AWT, Swing, JavaFX & SWT 0
vodkaz JFrame,Bilder und Zeitverzögerung AWT, Swing, JavaFX & SWT 2
A Swing Bilder werden nicht angezeigt AWT, Swing, JavaFX & SWT 3
I SWT Bilder, bzw. ein einzelnes Bild AWT, Swing, JavaFX & SWT 6
M Bilder zeichnen, NullPointer Exception AWT, Swing, JavaFX & SWT 3
Xbody 2D-Grafik JavaFX Bilder transformieren AWT, Swing, JavaFX & SWT 2
C 2D-Grafik Steganographie - Verschlüsselung von Dateien in Bildern - Bilder zeigen schwarze Rechtecke AWT, Swing, JavaFX & SWT 13
P Durch Bilder Scrollen AWT, Swing, JavaFX & SWT 2
F Bilder werden nicht in's Array geladen AWT, Swing, JavaFX & SWT 4
K Bilder übereinanderlegen AWT, Swing, JavaFX & SWT 11
windl Querstreifen beim Bilder malen und anpassen an neue CPU AWT, Swing, JavaFX & SWT 12
V Fertige Komponente zum Anzeigen mehrerer Bilder AWT, Swing, JavaFX & SWT 5
Karuka 2D-Grafik Bilder in GridLayout einfügen AWT, Swing, JavaFX & SWT 7
J Bilder in ausführbare jar einbinden AWT, Swing, JavaFX & SWT 7
J Swing Bilder anzeigen in Gridlayout AWT, Swing, JavaFX & SWT 11
H 2D-Grafik Bilder laden ist nicht zuverlässig AWT, Swing, JavaFX & SWT 3
F Bilder ineinander kopieren AWT, Swing, JavaFX & SWT 3
P Bilder verkleinern AWT, Swing, JavaFX & SWT 2
C SWT Mehrere Bilder in GUI laden AWT, Swing, JavaFX & SWT 5
Furtano AWT Skalierung mehrerer Bilder / Histogramme im Fenster AWT, Swing, JavaFX & SWT 4
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
T 2D-Grafik Statisches Hintergrundbild, dynamische Bilder drüber AWT, Swing, JavaFX & SWT 2
C Zwei Bilder übereinander legen AWT, Swing, JavaFX & SWT 1
L [SWT] Daten und Bilder drucken AWT, Swing, JavaFX & SWT 2
L Bilder im JPanel als Hintergrund - Swing AWT, Swing, JavaFX & SWT 2
K Bilder nacheinander einfügen AWT, Swing, JavaFX & SWT 3
H Bilder auf Buttons per Klick tauschen ( Puzzle ) AWT, Swing, JavaFX & SWT 8
H Bilder in Array zufällig anordnen AWT, Swing, JavaFX & SWT 4
P 2D-Grafik Viele Bilder zu einem Video AWT, Swing, JavaFX & SWT 3
J Vergleicher zweier Bilder AWT, Swing, JavaFX & SWT 2
C zwei Bilder nacheinander anzeigen AWT, Swing, JavaFX & SWT 2
L Swing Bilder über andere Bilder laden AWT, Swing, JavaFX & SWT 3
J Bilder überlappen AWT, Swing, JavaFX & SWT 18
P Bilder werden nach Änderung nicht angezeigt AWT, Swing, JavaFX & SWT 15
3 2D-Grafik Rechtecke auf Bilder legen und auslesen AWT, Swing, JavaFX & SWT 4
M Mehrere Bilder auf einmal anzeigen AWT, Swing, JavaFX & SWT 9
P Swing html mit bilder drin AWT, Swing, JavaFX & SWT 12
F Nicht alle Bilder werden angezeigt AWT, Swing, JavaFX & SWT 2
E Bilder auf JFrame AWT, Swing, JavaFX & SWT 7
R Bilder über URL einfügen AWT, Swing, JavaFX & SWT 4
F Applet zeigt Bilder nicht an AWT, Swing, JavaFX & SWT 5
M FileChooser Bilder auswählen AWT, Swing, JavaFX & SWT 8
G Swing Bilder zeichnen AWT, Swing, JavaFX & SWT 28
L Swing Bilder im Icons-Ordner AWT, Swing, JavaFX & SWT 4
U Bilder in Jar werden nicht gefunden AWT, Swing, JavaFX & SWT 5
S SWT Canvas: Flackernde Bilder AWT, Swing, JavaFX & SWT 3
A Bilder vergleichen AWT, Swing, JavaFX & SWT 4
E Swing JTextPane Inhalt(Text und Bilder) als HTML text bekommen AWT, Swing, JavaFX & SWT 3
E AWT Bilder und Java AWT, Swing, JavaFX & SWT 11
P Bilder einfügen AWT, Swing, JavaFX & SWT 4
D Swing JEditorPane mit HTML aber ohne Bilder AWT, Swing, JavaFX & SWT 3
S Swing Kleine Bilder in Panel einfügen AWT, Swing, JavaFX & SWT 13
A AWT Bilder als Link verwenden? AWT, Swing, JavaFX & SWT 11
T SWT Wie Bilder aus JAR-Dateien einbinden? AWT, Swing, JavaFX & SWT 12
S Bilder aus der Google Book Search API auslesen AWT, Swing, JavaFX & SWT 3
J Bilder in JScrollPane zentrieren AWT, Swing, JavaFX & SWT 5
M Bilder in einem Textfeld darstellen AWT, Swing, JavaFX & SWT 2
N Bilder aus Infos generieren lassen. Welches Framework? AWT, Swing, JavaFX & SWT 8
A SWT Bilder resizen AWT, Swing, JavaFX & SWT 9
A Swing Bilder in JFrame einfügen AWT, Swing, JavaFX & SWT 2
Cloud Einige Bilder werden nicht geladen AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen

Neue Themen


Oben