Swing/FishEyeTable のバックアップ差分(No.13)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/FishEyeTable へ行く。
- 1 (2008-11-24 (月) 16:48:07)
- 2 (2008-12-25 (木) 16:12:38)
- 3 (2011-05-13 (金) 23:02:34)
- 4 (2013-01-15 (火) 17:43:01)
- 5 (2014-11-29 (土) 01:46:17)
- 6 (2014-12-18 (木) 17:13:04)
- 7 (2015-03-19 (木) 16:13:47)
- 8 (2016-05-26 (木) 01:02:09)
- 9 (2016-09-28 (水) 17:08:30)
- 10 (2017-11-09 (木) 14:07:40)
- 11 (2018-02-24 (土) 19:51:30)
- 12 (2019-07-03 (水) 17:52:32)
- 13 (2021-03-14 (日) 19:52:32)
- 追加された行はこの色です。
- 削除された行はこの色です。
--- category: swing folder: FishEyeTable title: JTableの行の高さを変更する tags: [JTable, MouseMotionListener, MouseListener] author: aterai pubdate: 2008-11-24T16:48:07+09:00 description: JTableの行の高さを変更して、マウスカーソルの下を魚眼レンズのように拡大します。 image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTMw3Q5yMI/AAAAAAAAAZs/0O7lUunN9Rw/s800/FishEyeTable.png hreflang: href: https://java-swing-tips.blogspot.com/2008/12/jtable-fisheye-row.html lang: en --- * 概要 [#summary] `JTable`の行の高さを変更して、マウスカーソルの下を魚眼レンズのように拡大します。 #download(https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTMw3Q5yMI/AAAAAAAAAZs/0O7lUunN9Rw/s800/FishEyeTable.png) * サンプルコード [#sourcecode] #code(link){{ @Override public void mouseMoved(MouseEvent e) { int row = rowAtPoint(e.getPoint()); if (prev_row == row) { return; } initRowHeight(prev_height, row); prev_row = row; } public void initRowHeight(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); } } }} * 解説 [#explanation] 上記のサンプルでは、マウスカーソルの下の行の高さを`JTable#setRowHeight(int, int)`メソッドを使用して動的に変更し、魚眼レンズのような拡大強調表示を行っています。 - 注: -- `JTable#setFillsViewportHeight(true);`を使用しているので、`JDK 1.6.0`以上が必要 -- `JTable`自体の高さが変化することは想定していない - `JTable#setFillsViewportHeight(true);`を使用しているので、`JDK 1.6.0`以上が必要 - `JTable`自体の高さが変化することは想定していない * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JTable.html#setRowHeight-int-int- JTable#setRowHeight(int, int) (Java Platform SE 8)] - [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menus] * コメント [#comment] #comment - スクリーンショット更新 -- &user(aterai); &new{2008-12-25 (木) 16:12:54}; #comment