HyperlinkLabel - Hyperlinks in GUI-Komponenten: Unterschied zwischen den Versionen
K |
K |
||
(16 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | Gelegentlich kommt es vor, dass wir in einer Benutzeroberfläche eines Java-Programms Hyperlinks zu Web-Inhalten bereit stellen möchten. | + | Gelegentlich kommt es vor, dass wir in einer Benutzeroberfläche eines Java-Programms Hyperlinks zu Web-Inhalten oder E-Mail-Adressen per Text- oder Bild-Link bereit stellen möchten.<br> |
− | Folgende fertige Komponente wird dies erledigen können. | + | Häufig kann man das auch in bekannter [[Software]] sehen, dass innerhalb einer Benutzeroberfläche Weblinks zu Internet-Resourcen eingebaut wurden. |
+ | |||
+ | [[Datei:HyperlinkLabel.png]] | ||
+ | |||
+ | Doch wie kann man nun eine solche Funktionalität in einer Java-Anwendung mit [[Swing]] bereit stellen? Im nachfolgenden Code wird dazu die [[Klasse]] {{JAPI|javax.swing.JLabel}} erweitert. Es erscheint am naheliegensten, weil mit JLabels recht unkompliziert auch Bilder dargestellt werden können. Somit wären auch verlinkte Bilder und Grafiken innerhalb der GUI einer Java-Anwendung denkbar. | ||
+ | |||
+ | Folgende fertige Komponente wird dies erledigen können: | ||
+ | |||
+ | <syntaxhighlight lang="java"> | ||
+ | /* | ||
+ | * Copyright 2014 Gernot Segieth | ||
+ | * | ||
+ | * Licensed under the Apache License, Version 2.0 (the "License"); | ||
+ | * you may not use this file except in compliance with the License. | ||
+ | * You may obtain a copy of the License at | ||
+ | * | ||
+ | * http://www.apache.org/licenses/LICENSE-2.0 | ||
+ | * | ||
+ | * Unless required by applicable law or agreed to in writing, software | ||
+ | * distributed under the License is distributed on an "AS IS" BASIS, | ||
+ | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
+ | * See the License for the specific language governing permissions and | ||
+ | * limitations under the License. | ||
+ | */ | ||
− | |||
import java.awt.Cursor; | import java.awt.Cursor; | ||
import java.awt.Desktop; | import java.awt.Desktop; | ||
Zeile 17: | Zeile 39: | ||
* HyperlinkLabel dient zur Bereitstellung von Hyperlinks mit entsprechendem | * HyperlinkLabel dient zur Bereitstellung von Hyperlinks mit entsprechendem | ||
* Verhalten in einem JLabel-Typ. | * Verhalten in einem JLabel-Typ. | ||
+ | * @author Gernot Segieth | ||
*/ | */ | ||
public class HyperlinkLabel extends JLabel implements MouseListener { | public class HyperlinkLabel extends JLabel implements MouseListener { | ||
Zeile 60: | Zeile 83: | ||
* nach dem Wert des Alignments ausrichtet. | * nach dem Wert des Alignments ausrichtet. | ||
* @param image Das Bild, das angezeigt werden soll. | * @param image Das Bild, das angezeigt werden soll. | ||
− | * @param horizontalAlignment Das | + | * @param horizontalAlignment Das Attribut zum horizontalen Ausrichten des Inhaltes. |
* @param url Die URL, mit der das Bild verlinkt werden soll. | * @param url Die URL, mit der das Bild verlinkt werden soll. | ||
* @see javax.swing.JLabel(javax.swing.Icon, int) | * @see javax.swing.JLabel(javax.swing.Icon, int) | ||
Zeile 77: | Zeile 100: | ||
*/ | */ | ||
public HyperlinkLabel(String text, URL url) { | public HyperlinkLabel(String text, URL url) { | ||
− | super("<html><a href="+url.toString()+">"+text+"</a></html>"); | + | super("<html><a href=\""+url.toString()+"\">"+text+"</a></html>"); |
this.url = url; | this.url = url; | ||
addMouseListener(this); | addMouseListener(this); | ||
Zeile 88: | Zeile 111: | ||
* @param text Der Hyperlink-Text. | * @param text Der Hyperlink-Text. | ||
* @param image Das Bild, das angezeigt werden soll. | * @param image Das Bild, das angezeigt werden soll. | ||
− | * @param horizontalAlignment Das | + | * @param horizontalAlignment Das Attribut zum horizontalen Ausrichten des Inhaltes. |
* @param url Die URL, mit der der Text und das Bild verlinkt werden sollen. | * @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) | * @see javax.swing.JLabel(java.lang.String, javax.swing.Icon, int) | ||
Zeile 102: | Zeile 125: | ||
* auf der Komponente nach dem Wert des Alignments ausrichtet. | * auf der Komponente nach dem Wert des Alignments ausrichtet. | ||
* @param text Der Hyperlink-Text. | * @param text Der Hyperlink-Text. | ||
− | * @param horizontalAlignment Das | + | * @param horizontalAlignment Das Attribut zum horizontalen Ausrichten des Inhaltes. |
* @param url Die URL, mit der der Text verlinkt werden soll. | * @param url Die URL, mit der der Text verlinkt werden soll. | ||
* @see javax.swing.JLabel(java.lang.String, int) | * @see javax.swing.JLabel(java.lang.String, int) | ||
Zeile 179: | Zeile 202: | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
− | |||
[[Kategorie:Swing]] | [[Kategorie:Swing]] | ||
[[Kategorie:Java-Codeschnipsel]] | [[Kategorie:Java-Codeschnipsel]] |
Aktuelle Version vom 28. März 2018, 09:26 Uhr
Gelegentlich kommt es vor, dass wir in einer Benutzeroberfläche eines Java-Programms Hyperlinks zu Web-Inhalten oder E-Mail-Adressen per Text- oder Bild-Link bereit stellen möchten.
Häufig kann man das auch in bekannter Software sehen, dass innerhalb einer Benutzeroberfläche Weblinks zu Internet-Resourcen eingebaut wurden.
Doch wie kann man nun eine solche Funktionalität in einer Java-Anwendung mit Swing bereit stellen? Im nachfolgenden Code wird dazu die Klasse javax.swing.JLabel
erweitert. Es erscheint am naheliegensten, weil mit JLabels recht unkompliziert auch Bilder dargestellt werden können. Somit wären auch verlinkte Bilder und Grafiken innerhalb der GUI einer Java-Anwendung denkbar.
Folgende fertige Komponente wird dies erledigen können:
/*
* Copyright 2014 Gernot Segieth
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.
* @author Gernot Segieth
*/
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 Attribut 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 Attribut 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 Attribut 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);
}
}