Link in einem JTextPane darstellen?

testalucida

Mitglied
Hi,
wie kann ich es anstellen, dass ein Link in einem JTextPane wie ein Link dargestellt wird (blau, unterstrichen)?
Dabei geht es mir nicht um http- oder ftp- Verweise, sondern um file-Links, also auf Dateien in meinem Dateisystem.

Wenn ich mit dem Cursor drüberfahre, soll der natürlich die Handform annehmen.
Und wenn ich dann klicke, soll sich die zur Datei-Endung passende Anwendung öffnen (also Word für .doc, Excel für .xls etc.)

Muss ich das alles mühsam händisch programmieren, oder gibt's da was Passendes?

Jeder Tipp ist sehr willkommen!
Danke schon mal!
Grüße
testalucida
 
Hi !

Das hier ist eine Lösung mit einem JEditorPane (für Windows):

Java:
package tutorials;

import java.awt.BorderLayout;
import java.io.IOException;

import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JEditorPane;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.WindowConstants;

public class LinkInTextPane extends JFrame implements HyperlinkListener
{
	private JPanel jContentPane = null;

	private JEditorPane jEditorPane = null;

	/**
	 * This is the default constructor
	 */
	public LinkInTextPane()
	{
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize()
	{
		this.setSize(300, 200);
		this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane()
	{
		if (jContentPane == null)
		{
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getJEditorPane(), BorderLayout.CENTER);
		}
		return jContentPane;
	}

	/**
	 * This method initializes jEditorPane	
	 * 	
	 * @return javax.swing.JEditorPane	
	 */
	private JEditorPane getJEditorPane()
	{
		if (jEditorPane == null)
		{
			jEditorPane = new JEditorPane();
			jEditorPane.setContentType("text/html");
			jEditorPane.setEditable(false);
			jEditorPane.addHyperlinkListener(this);
			jEditorPane.setText("<a href=\"file://c:/temp/test.txt\">Ein Link</a>");
			
		}
		return jEditorPane;
	}
	
	public void hyperlinkUpdate(HyperlinkEvent e)
	{
		if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) 
		{
			System.out.println("clicked");
			try
			{	
				new ProcessBuilder(new String[] { "cmd", "/c", "start",e.getURL().toString() }).start();
			}
			catch (IOException e1)
			{
				e1.printStackTrace();
			}
		}
		
	}

	public static void main(String[] args)
	{
		LinkInTextPane litp = new LinkInTextPane();
		litp.setVisible(true);
	}

}

Gruss,
Krösi
 
Zuletzt bearbeitet:
Zurück