Swing/HyperlinkLabel のバックアップ(No.20)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/HyperlinkLabel へ行く。
- 1 (2007-11-26 (月) 04:49:23)
- 2 (2007-11-26 (月) 19:14:45)
- 3 (2007-11-27 (火) 11:11:34)
- 4 (2007-12-04 (火) 15:37:59)
- 5 (2008-01-25 (金) 16:19:16)
- 6 (2008-02-07 (木) 19:04:35)
- 7 (2008-05-19 (月) 14:06:20)
- 8 (2010-03-08 (月) 12:43:52)
- 9 (2010-03-08 (月) 13:45:50)
- 10 (2011-05-20 (金) 15:52:14)
- 11 (2013-01-29 (火) 14:40:32)
- 12 (2014-12-06 (土) 20:44:33)
- 13 (2014-12-14 (日) 14:44:21)
- 14 (2016-02-25 (木) 21:29:48)
- 15 (2016-05-27 (金) 13:23:14)
- 16 (2017-09-01 (金) 17:49:26)
- 17 (2018-09-21 (金) 15:51:21)
- 18 (2019-05-22 (水) 19:35:38)
- 19 (2020-09-23 (水) 00:44:24)
- 20 (2022-05-26 (木) 16:21:30)
- 21 (2024-02-03 (土) 14:04:50)
- category: swing folder: HyperlinkLabel title: Hyperlinkを、JLabel、JButton、JEditorPaneで表示 tags: [Html, JLabel, JButton, JEditorPane, HyperlinkListener, Hyperlink] author: aterai pubdate: 2007-11-26T04:49:23+09:00 description: Hyperlinkを、JLabel、JButton、JEditorPaneで表示し、それぞれクリックした時のイベントを取得します。 image:
概要
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
、JButton
、JEditorPane
で表現し、それぞれクリックした時のイベントを取得するテストを行っています。
JLabel
+MouseListener
JLabel
にMouseListener
を設定- リンクの表示には
<a>
タグを使用
JButton
+ButtonUI
JButton
に文字の描画を変更するButtonUI
を設定Rollover
: アンダーラインPressed
: 黒
JEditorPane
+HyperlinkListener
- 編集不可にした
JEditorPane
にHyperlinkListener
を設定 - リンクの表示には
<a>
タグを使用 - 文字列選択してコピーが可能
- 編集不可にした
- 注:
- このサンプルでは、クリックされた時に実行するイベントは
beep
音を鳴らすだけのダミー - リンクをブラウザで開く場合は、Desktopでブラウザを起動などを参照
- このサンプルでは、クリックされた時に実行するイベントは
参考リンク
- JEditorPane (Java Platform SE 8)
- Link Buttons in Swing - Santhosh Kumar's Weblog
JButton
+MatteBorder
でリンクを表現するサンプルがある
- TransferHandlerでHyperlinkをブラウザにドロップ
- Htmlを使ったJLabelとJEditorPaneの無効化