TITLE:Hyperlinkを、JLabel、JButton、JEditorPaneで表示

Hyperlinkを、JLabel、JButton、JEditorPaneで表示

編集者:Terai Atsuhiro~

作成日:2007-11-26
更新日: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: https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTOIQH0ABI/AAAAAAAAAb4/9QlzkW-7_Es/s800/HyperlinkLabel.png

概要

Hyperlinkを、JLabelJButtonJEditorPaneで表示し、それぞれクリックした時のイベントを取得します。

概要

Hyperlinkを、JLabel、JButton、JEditorPaneで表示し、それぞれクリックした時のイベントを取得します。

#screenshot

サンプルコード

#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
class URILabel extends JLabel {
  private final String href;
  public URILabel(String href) {
    super("<html><a href='"+href+"'>"+href+"</a>");
    super("<html><a href='" + href + "'>" + href + "</a>");
    this.href = href;
    setCursor(new Cursor(Cursor.HAND_CURSOR));
    setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
    addMouseListener(new MouseAdapter() {
      public void mousePressed(MouseEvent e) {open(href);}
      @Override public void mousePressed(MouseEvent e) {
        open(href);
      }
    });
  }
}
#spandel
#spanend
#spanadd
// ...
#spanend
#spanadd

#spanend
JButton button = new JButton(a);
button.setUI(LinkViewButtonUI.createUI(button));

#spanadd
// ...
#spanend
#spanadd

#spanend
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(new Cursor(Cursor.HAND_CURSOR));
    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) {
  @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);
    //...
#spandel
   // ...
 }
}
#spanend
#spandel
JEditorPane editor = new JEditorPane("text/html", "<html><a href='"+MYSITE+"'>"+MYSITE+"</a>");
#spanend
#spanadd
JEditorPane editor = new JEditorPane(
#spanend
    "text/html", "<html><a href='" + MYSITE + "'>" + MYSITE + "</a>");
editor.setOpaque(false);
#spandel
//editor.setBackground(getBackground());
#spanend
#spandel
editor.setEditable(false); //REQUIRED
#spanend
#spanadd
// editor.setBackground(getBackground());
#spanend
#spanadd
// editor.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE);
#spanend
#spanadd
editor.setEditable(false); // REQUIRED
#spanend
editor.addHyperlinkListener(new HyperlinkListener() {
  public void hyperlinkUpdate(HyperlinkEvent e) {
    if(e.getEventType()==HyperlinkEvent.EventType.ACTIVATED) {
      java.awt.Toolkit.getDefaultToolkit().beep();
  @Override public void hyperlinkUpdate(HyperlinkEvent e) {
    if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
      Toolkit.getDefaultToolkit().beep();
    }
  }
});
  • &jnlp;
  • &jar;
  • &zip;

解説

上記のサンプルでは、クリックされた時に、リンクをブラウザで開く(Desktopでブラウザを起動)代わりに、beep音を鳴らしています。

解説

  • JLabel + MouseListener
    • JLabelMouseListenerを設定
    • リンクの表示には<a>タグを使用
  • JButton + ButtonUI
    • JButtonに文字の描画を変更するButtonUIを設定
      • Rollover: アンダーライン
      • Pressed: 黒
  • JEditorPane + HyperlinkListener
    • 編集不可にしたJEditorPaneHyperlinkListenerを設定
    • リンクの表示には<a>タグを使用
    • 文字列選択してコピーが可能
  • JLabel+MouseListener
    • JLabelにMouseListenerを設定しています。
    • リンクの表示には<a>タグを使っています。
      • -
  • このサンプルではクリックされた時に実行するイベントはbeep音を鳴らすだけ リンクをブラウザで開く場合の処理はDesktopでブラウザを起動などを参照
  • JButton+ButtonUI
    • JButtonに、文字の描画を変更するButtonUIを設定しています。
      • Rollover: アンダーライン
      • Pressed: 黒

参考リンク

  • JEditorPane+HyperlinkListener
    • 編集不可にしたJEditorPaneにHyperlinkListenerを設定しています。
    • リンクの表示には<a>タグを使っています。
    • 選択してコピーできます。

参考リンク

コメント

コメント