• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:Htmlで修飾した文字列のクリップ
#navi(../)
#tags()
RIGHT:Posted by &author(aterai); at 2009-07-06
*Htmlで修飾した文字列のクリップ [#j2842464]
Htmlで文字列を修飾するとクリップされなくなるので、予めクリップした文字列を作成してからHtmlを使用します。
---
category: swing
folder: ClippedHtmlLabel
title: Htmlで修飾した文字列のクリップ
tags: [Html, JTable, TableCellRenderer, JLabel, Hyperlink]
author: aterai
pubdate: 2009-07-06T15:24:09+09:00
description: Htmlで文字列を修飾するとクリップされなくなるので、予めクリップした文字列を作成してからHtmlを使用します。
image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTJP6CTKHI/AAAAAAAAAUE/aD5gF_0luwI/s800/ClippedHtmlLabel.png
---
* 概要 [#summary]
`Html`で文字列を修飾するとクリップされなくなるので、予めクリップした文字列を作成してから`Html`を使用します。

-&jnlp;
-&jar;
-&zip;
#download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTJP6CTKHI/AAAAAAAAAUE/aD5gF_0luwI/s800/ClippedHtmlLabel.png)

//#screenshot
#ref(http://lh3.ggpht.com/_9Z4BYR88imo/TQTJP6CTKHI/AAAAAAAAAUE/aD5gF_0luwI/s800/ClippedHtmlLabel.png)

**サンプルコード [#c0d8e028]
* サンプルコード [#sourcecode]
#code(link){{
class URLRenderer extends DefaultTableCellRenderer
                  implements MouseListener, MouseMotionListener {
    implements MouseListener, MouseMotionListener {
  private static Rectangle lrect = new Rectangle();
  private static Rectangle irect = new Rectangle();
  private static Rectangle trect = new Rectangle();
  private int row = -1;
  private int col = -1;
  public Component getTableCellRendererComponent(JTable table, Object value,
                           boolean isSelected, boolean hasFocus,
                           int row, int column) {
  @Override public Component getTableCellRendererComponent(
      JTable table, Object value, boolean isSelected,
      boolean hasFocus, int row, int column) {
    super.getTableCellRendererComponent(table, value, isSelected, false, row, column);

    int mw = table.getColumnModel().getColumnMargin();
    int rh = table.getRowMargin();
    int w  = table.getColumnModel().getColumn(column).getWidth();
    int h  = table.getRowHeight(row);
    int w = table.getColumnModel().getColumn(column).getWidth();
    int h = table.getRowHeight(row);

    Insets i = this.getInsets();
    lrect.x = i.left;
    lrect.y = i.top;
    lrect.width  = w - (mw + i.right  + lrect.x);
    lrect.height = h - (rh + i.bottom + lrect.y);
    irect.x = irect.y = irect.width = irect.height = 0;
    trect.x = trect.y = trect.width = trect.height = 0;

    String str = SwingUtilities.layoutCompoundLabel(
      this,
      this.getFontMetrics(this.getFont()),
      value.toString(), //this.getText(),
      value.toString(), // this.getText(),
      this.getIcon(),
      this.getVerticalAlignment(),
      this.getHorizontalAlignment(),
      this.getVerticalTextPosition(),
      this.getHorizontalTextPosition(),
      lrect,
      irect, //icon
      trect, //text
      irect, // icon
      trect, // text
      this.getIconTextGap());

    if(!table.isEditing() && this.row==row && this.col==column) {
      setText("<html><u><font color='blue'>"+str);
    }else if(hasFocus) {
      setText("<html><font color='blue'>"+str);
    }else{
    if (!table.isEditing() && this.row == row && this.col == column) {
      setText("<html><u><font color='blue'>" + str);
    } else if (hasFocus) {
      setText("<html><font color='blue'>" + str);
    } else {
      setText(str);
      //setText(value.toString());
      // setText(value.toString());
    }
    return this;
  }
  //...
  // ...
}}

**解説 [#l14757ca]
-上
--setText("<html><font color='blue'>"+str); で文字列に下線を引く
-下
--SwingUtilities.layoutCompoundLabelメソッドを使用して文字列をセル幅でクリップ
--setText("<html><font color='blue'>"+str); で文字列に下線を引く
* 解説 [#explanation]
- 上
-- `setText("<html><font color='blue'>"+str);`メソッドを使用して文字列に下線を引く
-- 文字列は省略されない
- 下
-- `SwingUtilities.layoutCompoundLabel(...)`メソッドを使用して文字列をセル幅分のみに省略
-- `setText("<html><font color='blue'>"+clippedTxt);`メソッドを使用して省略済みの文字列に下線を引く

**参考リンク [#b6c3f45d]
-[[JTableのセルにHyperlinkを表示>Swing/HyperlinkInTableCell]]
* 参考リンク [#reference]
- [[JTableのセルにHyperlinkを表示>Swing/HyperlinkInTableCell]]

**コメント [#u9ec6110]
* コメント [#comment]
#comment
#comment