HyperlinkLabel - Hyperlinks in GUI-Komponenten: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K
K
Zeile 183: Zeile 183:
 
[[Kategorie:Java]]
 
[[Kategorie:Java]]
 
[[Kategorie:Swing]]
 
[[Kategorie:Swing]]
Kategorie:Java-Codeschnipsel
+
[[Kategorie:Java-Codeschnipsel]]

Version vom 27. Mai 2014, 07:23 Uhr

Gelegentlich kommt es vor, dass wir in einer Benutzeroberfläche eines Java-Programms Hyperlinks zu Web-Inhalten bereit stellen möchten. Folgende fertige Komponente wird dies erledigen können.

<code=java> import java.awt.Cursor; import java.awt.Desktop; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.IOException; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; import javax.swing.JLabel; import javax.swing.Icon;

/**

* HyperlinkLabel dient zur Bereitstellung von Hyperlinks mit entsprechendem
* Verhalten in einem JLabel-Typ.
*/

public class HyperlinkLabel extends JLabel implements MouseListener {

   private URL url;
   protected final static Cursor HAND_CURSOR = new Cursor(Cursor.HAND_CURSOR);
   protected final static Cursor DEFAULT_CURSOR = new Cursor(Cursor.DEFAULT_CURSOR);
   /**
    * Erzeugt ein leeres HyperLinkLabel.
    * @see javax.swing.JLabel()
    */
   public HyperlinkLabel() {
       addMouseListener(this);
   }
   
   /**
    * Erzeugt ein neues HyperLinkLabel, welches den Textinhalt für den Hyperlink
    * aus der übergebenen URL entnimmt.
    * @param url Die URL, die als Hyperlink und Textinhalt verwendet werden soll.
    * @see javax.swing.JLabel(java.lang.String)
    */
   public HyperlinkLabel(URL url) {
       this(url.toString(), url);
   }
   /**
    * Erzeugt ein neues HyperLinkLabel, welches das übergebene Bild mit der
    * übergebenen URL verlinkt.
    * @param image Das Bild, das angezeigt werden soll.
    * @param url Die URL, mit der das Bild verlinkt werden soll.
    * @see javax.swing.JLabel(javax.swing.Icon)
    */
   public HyperlinkLabel(Icon image, URL url) {
       super(image);
       this.url = url;
       addMouseListener(this);
   }
   /**
    * Erzeugt ein neues HyperlinkLabel, welches das übergebene Bild mit der 
    * übergebenen URL verlinkt und den Inhalt horizontal auf der Komponente
    * nach dem Wert des Alignments ausrichtet.
    * @param image Das Bild, das angezeigt werden soll.
    * @param horizontalAlignment Das Atrribut zum horizontalen Ausrichten des Inhaltes.
    * @param url Die URL, mit der das Bild verlinkt werden soll.
    * @see javax.swing.JLabel(javax.swing.Icon, int)
    */
   public HyperlinkLabel(Icon image, int horizontalAlignment, URL url) {
       this(image, url);
       setHorizontalAlignment(horizontalAlignment);
   }
   /**
    * Erzeugt ein neues HyperlinkLabel, welches eine URL und einen beschreibenden
    * Text für den Hyperlink entgegennimmt.
    * @param text Der Hyperlink-Text.
    * @param url Die URL, mit der der Text verlinkt werden soll.
    * @see javax.swing.JLabel(java.lang.String)
    */
   public HyperlinkLabel(String text, URL url) {
       super("<html><a href="+url.toString()+">"+text+"</a></html>");
       this.url = url;
       addMouseListener(this);
   }
   /**
    * Erzeugt ein neues HyperlinkLabel, einen beschreibenden Text für den Hyperlink
    * und ein Bild mit der übergebenen URL verlinkt. Der Inhalt wird dabei horizontal 
    * auf der Komponente nach dem Wert des Alignments ausrichtet.
    * @param text Der Hyperlink-Text.
    * @param image Das Bild, das angezeigt werden soll.
    * @param horizontalAlignment Das Atrribut zum horizontalen Ausrichten des Inhaltes.
    * @param url Die URL, mit der der Text und das Bild verlinkt werden sollen.
    * @see javax.swing.JLabel(java.lang.String, javax.swing.Icon, int)
    */
   public HyperlinkLabel(String text, Icon image, int horizontalAlignment, URL url) {
       this(text, horizontalAlignment, url);
       setIcon(image);
   }
   /**
    * Erzeugt ein neues HyperlinkLabel, welches eine URL und einen beschreibenden
    * Text für den Hyperlink entgegennimmt. Der Inhalt wird dabei horizontal 
    * auf der Komponente nach dem Wert des Alignments ausrichtet.
    * @param text Der Hyperlink-Text.
    * @param horizontalAlignment Das Atrribut zum horizontalen Ausrichten des Inhaltes.
    * @param url Die URL, mit der der Text verlinkt werden soll.
    * @see javax.swing.JLabel(java.lang.String, int)
    */
   public HyperlinkLabel(String text, int horizontalAlignment, URL url) {
       this(text, url);
       setHorizontalAlignment(horizontalAlignment);
   }    
   
   /**
    * Gibt die derzeit gesetzte URL des HyperlinkLabels zurück, mit der die
    * Inhalte verlinkt sind.
    * @return Die verlinkte URL.
    */
   public URL getURL() {
       return url;
   }
   
   /**
    * Setzt eine neue URL, mit der das HyperlinkLabel verlinkt werden soll.
    * @param url Die URL zur Verlinkung der Inhalte des HyperlinkLabels.
    */
   public void setURL(URL url) {
       this.url = url;
   }    
   /**
    * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent) 
    */
   @Override
   public void mouseClicked(MouseEvent e) {
       if (Desktop.isDesktopSupported()) {
           try {
               Desktop.getDesktop().browse(url.toURI());
           } catch (MalformedURLException ex) {
               System.err.println(ex);
           } catch (URISyntaxException ex) {
               System.err.println(ex);
           } catch (IOException ex) {
               System.err.println(ex);
           }
       }
   }
   /**
    * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent) 
    */
   @Override
   public void mousePressed(MouseEvent e) {
   }
   /**
    * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent) 
    */
   @Override
   public void mouseReleased(MouseEvent e) {
   }
   /**
    * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent) 
    */
   @Override
   public void mouseEntered(MouseEvent e) {
       setCursor(HyperlinkLabel.HAND_CURSOR);
   }
   
   /**
    * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent) 
    */    
   @Override
   public void mouseExited(MouseEvent e) {
       setCursor(HyperlinkLabel.DEFAULT_CURSOR);
   }

} </code=java>