Hyperlinkを、JLabel、JButton、JEditorPaneで表示
Total: 20588
, Today: 3
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
Hyperlink
を、JLabel
、JButton
、JEditorPane
で表示し、それぞれクリックした時のイベントを取得します。
Screenshot
Advertisement
サンプルコード
class URILabel extends JLabel {
private final String href;
public URILabel(String href) {
super("<html><a href='" + href + "'>" + href + "</a>");
this.href = href;
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
addMouseListener(new MouseAdapter() {
@Override public void mousePressed(MouseEvent e) {
open(href);
}
});
}
}
// ...
JButton button = new JButton(a);
button.setUI(LinkViewButtonUI.createUI(button));
// ...
class LinkViewButtonUI extends BasicButtonUI {
private final static LinkViewButtonUI linkViewButtonUI = new LinkViewButtonUI();
public static ButtonUI createUI(JButton b) {
b.setBorder(BorderFactory.createEmptyBorder(0, 0, 2, 0));
b.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
return linkViewButtonUI;
}
private LinkViewButtonUI() {
super();
}
private static Dimension size = new Dimension();
private static Rectangle viewRect = new Rectangle();
private static Rectangle iconRect = new Rectangle();
private static Rectangle textRect = new Rectangle();
@Override public synchronized void paint(Graphics g, JComponent c) {
AbstractButton b = (AbstractButton) c;
ButtonModel model = b.getModel();
Font f = c.getFont();
g.setFont(f);
FontMetrics fm = c.getFontMetrics(f);
// ...
}
}
JEditorPane editor = new JEditorPane(
"text/html", "<html><a href='" + MYSITE + "'>" + MYSITE + "</a>");
editor.setOpaque(false);
// editor.setBackground(getBackground());
// editor.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE);
editor.setEditable(false); // REQUIRED
editor.addHyperlinkListener(new HyperlinkListener() {
@Override public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
Toolkit.getDefaultToolkit().beep();
}
}
});
View in GitHub: Java, Kotlin解説
JLabel
+MouseListener
JLabel
にMouseListener
を設定- リンクの表示には
<a>
タグを使用
JButton
+ButtonUI
JButton
に文字の描画を変更するButtonUI
を設定Rollover
: アンダーラインPressed
: 黒
JEditorPane
+HyperlinkListener
- 編集不可にした
JEditorPane
にHyperlinkListener
を設定 - リンクの表示には
<a>
タグを使用 - 文字列選択してコピーが可能
- 編集不可にした
このサンプルではクリックされた時に実行するイベントはリンクをブラウザで開く場合の処理はDesktopでブラウザを起動などを参照beep
音を鳴らすだけ
参考リンク
- JEditorPane (Java Platform SE 8)
- Link Buttons in Swing - Santhosh Kumar's Weblog
JButton
+MatteBorder
でリンクを表現するサンプルがある
- TransferHandlerでHyperlinkをブラウザにドロップ
- Htmlを使ったJLabelとJEditorPaneの無効化