• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTableのセルにHyperlinkを表示
#navi(../)
*JTableのセルにHyperlinkを表示 [#i9f9d8f2]
Posted by [[terai]] at 2008-12-29

#contents

**概要 [#pc43297e]
RIGHT:Posted by [[terai]] at 2008-12-29
*JTableのセルにHyperlinkを表示 [#f072587c]
JTableのセルの中に、Hyperlinkを表示します。

-&jnlp;
-&jar;
-&zip;

#screenshot

**サンプルコード [#ad07fbdc]
**サンプルコード [#d5d8fa16]
#code{{
class URLRenderer extends DefaultTableCellRenderer
        implements MouseListener, MouseMotionListener {
  private final JTable table;
  private int row = -1;
  private int col = -1;
  public URLRenderer(JTable table) {
    super();
    this.table = table;
    table.addMouseListener(this);
    table.addMouseMotionListener(this);
  }
  public Component getTableCellRendererComponent(JTable table, Object value,
                           boolean isSelected, boolean hasFocus,
                           int row, int column) {
    super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
    if(!table.isEditing() && this.row==row && this.col==column) {
      setText("<html><u><font color='blue'>"+value.toString());
    }else if(hasFocus) {
      setText("<html><font color='blue'>"+value.toString());
    }else{
      setText(value.toString());
    }
    return this;
  }
  public void mouseMoved(MouseEvent e) {
    Point pt = e.getPoint();
    row = table.rowAtPoint(pt);
    col = table.columnAtPoint(pt);
    if(row<0 || col<0) {
      row = -1;
      col = -1;
    }
    table.repaint();
  }
  public void mouseExited(MouseEvent e)  {
    row = -1;
    col = -1;
    table.repaint();
  }
  public void mouseClicked(MouseEvent e) {
    Point pt = e.getPoint();
    int crow = table.rowAtPoint(pt);
    int ccol = table.columnAtPoint(pt);
    if(table.getColumnClass(ccol).equals(URL.class))
      System.out.println(table.getValueAt(crow, ccol));
  }
  public void mouseDragged(MouseEvent e) {}
  public void mouseEntered(MouseEvent e) {}
  public void mousePressed(MouseEvent e) {}
  public void mouseReleased(MouseEvent e) {}
}
}}

**解説 [#r2e94ee5]
**解説 [#sd316cd4]
htmlタグを使って文字列を修飾するセルレンダラーを作成して使用しています。
#code{{
TableColumn col = table.getColumnModel().getColumn(2);
col.setCellRenderer(new URLRenderer(table));
}}
----
上記のサンプルでは、クリックしてもリンク先には接続せず、System.out.println(table.getValueAt(crow, ccol));で文字列を表示しているだけです。

**参考リンク [#mfb25edf]
**参考リンク [#ofbb1d91]
-[[Hyperlinkを、JLabel、JButton、JEditorPaneで表示>Swing/HyperlinkLabel]]

**コメント [#r96bbd41]
**コメント [#v4971191]
#comment