# aus einem JApplet ein Image in separatem JFrame anzeigen



## Sergeant_Pepper (6. Aug 2007)

Guten Tag,

ich bin ganz neu in Java und möchte folgendes programmieren:
aus einem JApplet heraus soll sich nach dem Drücken eines Buttons *ein neues Fenster* (JFrame?) öffnen, in welchem eine Grafik (JPG oder PNG) angezeigt wird.
Ich habe hier und in der Standard-Literatur (Krüger, "Insel") schon ähnliche Themen gefunden, aber da soll immer direkt in das Applet gezeichnet werden. Mir fehlt da bislang der "rote Faden", weil es - scheinbar - recht unterschiedliche Wege gibt.
Kennt jemand ein gutes Tutorial?
Der Code unten öffnet lediglich ein leeres Fenster in minimaler Größe.

Gekürztes, lauffähiges Beispiel:


```
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.JComponent;

public class ViewComponent extends JComponent
{
    private Image image;

    public void setImage(Image img)
    {
        this.image = img;

        if (image != null)
        {
            repaint();
        }
    }

    @Override
    protected void paintComponent(Graphics g)
    {
        if (image != null) g.drawImage(image, 0, 0, this);
    }
}
```


```
import javax.swing.*;
import java.awt.*;

public class ImageFrame extends JFrame
{
    private ViewComponent viewComponent = new ViewComponent();

    private static final long serialVersionUID = -860326443865178967L;

    public ImageFrame(Image img)
    {
        super("Bildbetrachter");
        this.add(viewComponent);
        viewComponent.setImage(img);
        
    }

}
```


```
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.*;

public class TestBasis extends JApplet implements ActionListener
{

    private static final long serialVersionUID = 6297258864306719322L;

    private Image pict;

    private JTextField tx2;

    public void start()
    {
        Container p0;
        p0 = this.getContentPane();
        p0.setLayout(new BorderLayout());
        JLabel title = new JLabel("Test diverser GUI-Elemente");
        p0.add(title, BorderLayout.NORTH);

        JPanel p1 = new JPanel();
        p1.setLayout(new GridLayout(1, 2, 5, 5));
        
        JButton b2 = new JButton("Grafik zeigen (Platte)");
        b2.setActionCommand("grafik");
        b2.addActionListener(this);
        p1.add(b2);
        tx2 = new JTextField("FILE://H:\\2004-12-01_GLL-Karte_aus_LGN-Kartenverzeichnis.jpg");
        p1.add(tx2);

        p0.add(p1, BorderLayout.CENTER);
    }

    public void actionPerformed(ActionEvent e)
    {
        try
        {
            String act = e.getActionCommand();
            if (act.equals("grafik"))
            {
                pict = getImage(new URL(tx2.getText()));
                ImageFrame pictFr=new ImageFrame(pict);
                pictFr.setVisible(true);
            }
        }
        catch (MalformedURLException e1)
        {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }

}
```

Kennt jemand ein gutes Tutorial zum Laden von Grafiken?

Freundliche Grüße aus Hannover


----------



## L-ectron-X (6. Aug 2007)

Ich habe mir deinen Code jetzt nicht genauer angesehen, aber dazu fällt mir gerade ein, dass eine AccessControlException geworfen werden könnte, wenn du Bilder von fremden Rechnern lädst.
Guck mal bitte in die Java Console deines Browsers, ob sich da entsprechende Meldungen finden.


----------



## Sergeant_Pepper (6. Aug 2007)

L-ectron-X hat gesagt.:
			
		

> dazu fällt mir gerade ein, dass eine AccessControlException geworfen werden könnte, wenn du Bilder von fremden Rechnern lädst. Guck mal bitte in die Java Console deines Browsers, ob sich da entsprechende Meldungen finden.


Danke für den Tip, aber dass kann ich vorerst ausschließen, weil ich noch am testen im Applet-Viewer von Eclipse bin.


----------



## Marco13 (6. Aug 2007)

Was ist denn jetzt die Konkrete Frage? Images zu lagen geht so, wie du es schon machst. Und der Frame mit dem Bild sollte doch auch schon aufgehen?
Ansonsten kannst du (neben der "Insel") auch mal hier drüberschauen - kommt halt drauf an, worum es konkret geht..
http://java.sun.com/docs/books/tutorial/uiswing/


----------



## Sergeant_Pepper (7. Aug 2007)

Sergeant_Pepper hat gesagt.:
			
		

> ... Mir fehlt da bislang der "rote Faden", weil es - scheinbar - recht unterschiedliche Wege gibt.
> Der Code unten öffnet lediglich ein leeres Fenster in minimaler Größe.



Wie gesagt, das Beispiel funktioniert so nicht.


----------



## L-ectron-X (7. Aug 2007)

Ja, und nun? :roll:

Keine Fehlermeldung, keine Frage - keine Antwort...


----------



## Sergeant_Pepper (7. Aug 2007)

Wenn ich das Applet mit dem Applet-Viewer von Eclipse starte, wird der JFrame geöffnet, enthält wider Erwarten aber kein Bild.

Beim Start über einen Browser wird in der Java-Konsole diese Exception ausgegeben:

_Exception in thread "AWT-EventQueue-5" java.security.AccessControlException: access denied (java.net.SocketPermission H resolve)
_
Das kann ich nachvollziehen. Müsste es aber nicht im Applet-Viewer funktionieren?

Nachtrag: wenn ich mit einer angepassten policy-Datei arbeite, habe ich im Browser exakt das gleiche Verhalten wie unter Eclipse. Es wird dann keine Exception geworfen, aber das JFrame bleibt bei minimaler Größe einfach nur leer.


----------



## L-ectron-X (7. Aug 2007)

Ach nee... Hat er doch eine ACE... Hatte ich das nicht angekündigt?



			
				Sergeant_Pepper hat gesagt.:
			
		

> Müsste es aber nicht im Applet-Viewer funktionieren?


Nein, der kann nämlich auch nicht ohne weiteres die Sandbox verlassen.

Ich hab mal vor längerer Zeit einen Thread mit ähnlichem Thema behandelt.
Ein passendes Beispiel samt Code findest du da und kannst es auch herunterladen.
http://www.java-forum.org/de/viewtopic.php?t=18460


----------



## Sergeant_Pepper (7. Aug 2007)

Erst mal vielen Dank für Deine Hilfe.



			
				L-ectron-X hat gesagt.:
			
		

> Ach nee... Hat er doch eine ACE... Hatte ich das nicht angekündigt?


Du hast recht.
Wie gesagt, bin absoluter Einsteiger. Habe bisher nur eine größere Java-Anwendung fachlich betreut.



			
				L-ectron-X hat gesagt.:
			
		

> Ich hab mal vor längerer Zeit einen Thread mit ähnlichem Thema behandelt.
> Ein passendes Beispiel samt Code findest du da und kannst es auch herunterladen.
> http://www.java-forum.org/de/viewtopic.php?t=18460



Habe mir das Beispiel eben angeguckt. Mit dem dort zusätzlich geöffneten Fenster wird aber nichts weiter gemacht. Die Grafik wird im Applet-Bereich geladen. Ich will meine Grafik ja nicht im Applet, sondern im neuen Fenster laden.


----------



## L-ectron-X (7. Aug 2007)

OK, vielleicht hast du den Link auch nur übersehen:
http://freenet-homepage.de/java-forum/applets/thread_18460/

Klicke einfach mal auf den grafischen Button (Applet), dann öffnet sich ein JFrame mit einer Grafik drin.
Das ist doch das, was du willst. ???:L


----------



## Sergeant_Pepper (7. Aug 2007)

Das Beispiel trifft den Nagel auf den Kopf. Danke!   

Den Link hatte ich tatsächlich übersehen.

Werde mal gucken wie ich das verwerten kann, und dann hier Feedback geben.


----------

