Swing/FishEyeTable のバックアップ(No.11)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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:
hreflang:
href: http://java-swing-tips.blogspot.com/2008/12/jtable-fisheye-row.html lang: en
概要
JTable
の行の高さを変更して、マウスカーソルの下を魚眼レンズのように拡大します。
Screenshot
Advertisement
サンプルコード
@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);
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、マウスカーソルの下の行の高さをJTable#setRowHeight(int, int)
メソッドを使用して動的に変更し、魚眼レンズのような拡大強調表示を行っています。
- 注:
JTable#setFillsViewportHeight(true);
を使用しているので、JDK 1.6.0
以上が必要JTable
自体の高さが変化することは想定していない