# applet + hyperlink



## debian inside (29. Mai 2005)

wie kann man den hyperlinklistener von ner jtextpane dazu bringen das sich der link in nem neuen browserfenster öffnet
vorzugsweise natürlich der standard browser des systems

das ganze läuft in nem applet

danke


----------



## L-ectron-X (29. Mai 2005)

Dazu kannst du die Methode showDocument(URL url, String target) aus AppletContext benutzen.

```
URL url = new URL("http://www.java-forum.org");
String target = "_blank"; //Anzeige in einem, neuen Browserfenster. 
this.getAppletContext().showDocument(url, target);
```


----------



## satina (1. Jun 2005)

Danke, das hilft mir auch gerade seeeehr weiter! 

Kannst du mir sagen, für welches Objekt das 'this' vor getAppletContext() steht?


----------



## Wildcard (1. Jun 2005)

satina hat gesagt.:
			
		

> Kannst du mir sagen, für welches Objekt das 'this' vor getAppletContext() steht?


na für 'dieses' Objekt  :wink:  ... kann man aber auch einfach weglassen...


----------



## satina (1. Jun 2005)

Sorry, hab mich wohl etwas unklar ausgedrückt... 
Das this bezieht sich in meinem Code auf den HyperlinkListener, und der will einfach keinen AppletContext finden...


----------



## Wildcard (1. Jun 2005)

ach so... das ist eine Methode des Applets.


----------



## satina (2. Jun 2005)

hmmm... ich kreig das einfach nicht hin! Könntest du mir bitte bitte etwas mehr von deinem Code posten? 
Einfach der gesamte HyperlinkListener und wie das Applet generiert wird... bitte bitte  :wink:


----------



## debian inside (2. Jun 2005)

satina hat gesagt.:
			
		

> hmmm... ich kreig das einfach nicht hin! Könntest du mir bitte bitte etwas mehr von deinem Code posten?
> Einfach der gesamte HyperlinkListener und wie das Applet generiert wird... bitte bitte  :wink:




```
jtextpane1.addHyperlinkListener(new HyperlinkListener() 
 { 
    public void hyperlinkUpdate(HyperlinkEvent event) 
    { 
        if(event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) 
        { 
            try
            {
                URL url = new URL(event.getDescription()); 
                String target = "_blank"; 
                getAppletContext().showDocument(url, target);
            }
            catch(Exception ex)
            {
                System.err.println(ex.toString());
            }	     
        } 
    } 
});
```

das target kann man sicher auch aus dem event bekommen
hab ich aber in meinem fall nicht gebraucht weil es nur mehr datentransfer verursacht hätte


----------



## L-ectron-X (2. Jun 2005)

Ich habe das nicht über einen HyperlinkListener eingebaut, sondern über einen ItemListener einer Choice innerhalb eines Applets.
Aber auch in einem HyperlinkListener sollte das gehen. Im Prinzip musst du dir nur eine Applet-Referenz besorgen (Instanz erzeugen) und darauf dann die getAppletContext()-Methode aufrufen.
Wenn du es nicht hinbekommst, lass mal was von deinem Code anschauen.


----------



## satina (2. Jun 2005)

Das ist genau das was mit fehlt, eine Referenz auf ein Applet-Objekt. 
Kenne mich ja nicht so aus mit Applets, und habe versucht, beim Aufruf des Listeners ein neues JApplet zu generieren, aber das gab mit dann beim getAppletContext() immer eine Null-Pointer-Exception. 

Ansonsten sieht mein Listener-Dings etwa so aus wie bei Debian... 

Ich poste hier mal meinen gesamten Konstruktor des Objekts... 

Danke für eure Hilfe! 



```
public HelpWindow()   {
		
		JPanel panel = new JPanel(); 
		panel.setLayout(new BorderLayout());
		Border bd1 = BorderFactory.createLineBorder(Color.lightGray); 
		((JPanel)panel).setBorder(bd1);

		htmlPane = new JEditorPane();
        htmlPane.setBackground(new Color(255,255,220));
        htmlPane.setFont(new Font("Arial", Font.PLAIN, 10)); 
		htmlPane.setContentType("text/html");


	    HyperlinkListener listener = new HyperlinkListener() {
	      public void hyperlinkUpdate(HyperlinkEvent e) {
	        if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
	          try {
	        	
	        	URL url = e.getURL(); 
	        	String target = "_blank"; 
	        	//app.getAppletContext().showDocument(url, target);
	        	
                //htmlPane.setPage(e.getURL());
	          } catch (IOException ioe) {
	          		System.err.println("Error loading: " + ioe);
	          }
	        }
	      }
	    };
	    htmlPane.addHyperlinkListener(listener);
	    htmlPane.setEditable(false);
		
		JScrollPane sp = new JScrollPane(htmlPane);
		sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		
		JPanel southp = new JPanel(new GridLayout(0,2)); 
		exitbutton = new JButton("exit"); 
		exitbutton.setFont(new Font("Arial", Font.PLAIN, 11));
		exitbutton.addMouseListener(new MyMouseListener()); 
		exitendbutton = new JButton("exit & terminate help"); 
		exitendbutton.setFont(new Font("Arial", Font.PLAIN, 11));
		exitendbutton.addMouseListener(new MyMouseListener()); 
		southp.add(exitendbutton); 
		southp.add(exitbutton); 
		
		panel.add("Center", sp);
		panel.add("South", southp); 
		setContentPane(panel);
		setSize(350, 350);
	}
```


----------



## Wildcard (2. Jun 2005)

Mach doch einfach die anonyme innere Klasse weg und implementier HyperLinkListener in deinem Applet.
Alternativ kannst du auch vorher eine Referenz bereitstellen, zb.


```
final MyClass myClass = this;
```
darauf kannst du dann im Listener zugreifen.


----------



## satina (2. Jun 2005)

hmmm... mein HelpWindow ist ein JWindow, könnte da das Problem liegen? 

Kurze Zusammenfassung des Ziels des Programms: HelpWindow ist ein JWindow, welches mir in einem JEditorPane HTML-Seiten anzeigt. Wenn ich in der HTML-Seite einen Link anklicke, soll es mir diesen in einem neuen "fliegenden Fenster" anzeigen. (JEditorPane hat drum Probleme mit Ausführen von Java-Script in HTML-Dateien). Ich erhoffe mir damit, dass das "fliegende Fenster" die Scripts anzeigen kann.


----------



## Wildcard (2. Jun 2005)

Das einfachste ist es dann dem JWindow eine Referenz auf das Applet zu übergeben.


----------



## L-ectron-X (2. Jun 2005)

im Applet:

```
new HelpWindow(this).setVisible(true);
```

im HelpWindow:

```
public HelpWindow(Applet app) {
```


----------

