Swing/SlideTableRows のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/SlideTableRows へ行く。
- 1 (2009-04-06 (月) 14:03:11)
- 2 (2011-05-04 (水) 18:58:16)
- 3 (2013-01-10 (木) 17:43:58)
- 4 (2013-12-25 (水) 18:57:48)
- 5 (2014-11-30 (日) 00:44:59)
- 6 (2015-01-25 (日) 18:33:25)
- 7 (2015-08-05 (水) 15:17:18)
- 8 (2017-04-06 (木) 20:38:58)
- 9 (2018-02-24 (土) 19:51:30)
- 10 (2018-03-23 (金) 16:28:34)
- 11 (2020-03-26 (木) 15:08:31)
- 12 (2021-09-30 (木) 09:48:58)
TITLE:JTableで行の追加、削除アニメーション
Posted by aterai at 2009-04-06
JTableで行の追加、削除アニメーション
JTableの行追加や削除をスライドアニメーションで強調します。
- &jnlp;
- &jar;
- &zip;
サンプルコード
private void testCreateActionPerformed(ActionEvent e) {
model.addTest(new Test("New name", ""));
(new javax.swing.Timer(DELAY, new ActionListener() {
int i = table.convertRowIndexToView(model.getRowCount()-1);
int h = START_HEIGHT;
public void actionPerformed(ActionEvent e) {
if(h<END_HEIGHT) {
table.setRowHeight(i, h++);
}else{
((javax.swing.Timer)e.getSource()).stop();
}
}
})).start();
}
private void deleteActionPerformed(ActionEvent evt) {
final int[] selection = table.getSelectedRows();
if(selection==null || selection.length<=0) return;
(new javax.swing.Timer(DELAY, new ActionListener() {
int h = END_HEIGHT;
public void actionPerformed(ActionEvent e) {
h--;
if(h>START_HEIGHT) {
for(int i=selection.length-1;i>=0;i--)
table.setRowHeight(selection[i], h);
}else{
((javax.swing.Timer)e.getSource()).stop();
for(int i=selection.length-1;i>=0;i--)
model.removeRow(table.convertRowIndexToModel(selection[i]));
}
}
})).start();
}
解説
上記のサンプルでは、javax.swing.Timerを使用して、徐々に行の高さを変更することで、アニメーションを行っています。
- 追加
- 行を追加したあとで、JTable#setRowHeight(int, int)メソッドを使用して追加された行の高さを変更
- 削除
- 選択された行の高さを、JTable#setRowHeight(int, int)メソッドを使用して変更
- 高さが一定以下になったら、選択されていた行を削除