• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTableの行の高さを変更する
#navi(../)
RIGHT:Posted by [[aterai]] at 2008-11-24
#tags()
RIGHT:Posted by &author(aterai); at 2008-11-24
*JTableの行の高さを変更する [#f76fb424]
JTableの行の高さを変更して、マウスカーソルの下を魚眼レンズのように拡大します。

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

//#screenshot
#ref(http://lh5.ggpht.com/_9Z4BYR88imo/TQTMw3Q5yMI/AAAAAAAAAZs/0O7lUunN9Rw/s800/FishEyeTable.png)

**サンプルコード [#h51cf8b6]
#code{{
public void mouseMoved(MouseEvent e) {
#code(link){{
@Override public void mouseMoved(MouseEvent e) {
  int row = rowAtPoint(e.getPoint());
  if(prev_row==row) return;
  initRowHeigth(prev_height, row);
  prev_row = row;
}
public void initRowHeigth(int height, int ccRow) {
  int rd2      = (fishEyeRowList.size()-1)/2;
  int rowCount = getModel().getRowCount();
  int view_rc  = getViewableColoredRowCount(ccRow);
  int view_h   = 0; for(int i=0;i<view_rc;i++) view_h += fishEyeRowHeightList.get(i);
  int rest_rc  = rowCount - view_rc;
  int rest_h   = height - view_h;
  int rest_rh  = rest_h/rest_rc; rest_rh = rest_rh>0?rest_rh:1;
  int a        = rest_h - rest_rh*rest_rc;
  int index    = -1;
  for(int i=-rd2;i<rowCount;i++) {
    int crh;
    if(ccRow-rd2<=i && i<=ccRow+rd2) {
      index++;
      if(i<0) continue;
      crh = fishEyeRowHeightList.get(index);
    }else{
      if(i<0) continue;
      crh = rest_rh+(a>0?1:0);
      a = a-1;
    }
    setRowHeight(i, crh);
  }
}
}}

**解説 [#l87b6de9]
上記のサンプルでは、マウスカーソルの下の行の高さを、JTable#setRowHeight() メソッドを使って変更することで、魚眼レンズのように拡大するようになっています。

-注意
--JTable#setFillsViewportHeight(true); を使用しているので、JDK 6 以上が必要です。
--JTableの高さが変更される場合は考慮していません。

**参考リンク [#s1716c99]
-[http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menus]

**コメント [#e349a66c]
- スクリーンショット更新 -- [[aterai]] &new{2008-12-25 (木) 16:12:54};

#comment