Swing/MoveRow のバックアップ(No.15)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/MoveRow へ行く。
- 1 (2005-06-30 (木) 21:31:40)
- 2 (2005-09-15 (木) 15:56:54)
- 3 (2006-02-27 (月) 16:14:45)
- 4 (2007-03-13 (火) 00:22:56)
- 5 (2007-04-05 (木) 19:56:45)
- 6 (2007-04-12 (木) 04:18:01)
- 7 (2007-12-12 (水) 01:42:26)
- 8 (2007-12-12 (水) 14:06:24)
- 9 (2007-12-12 (水) 15:54:49)
- 10 (2007-12-17 (月) 06:45:33)
- 11 (2007-12-17 (月) 11:39:34)
- 12 (2008-03-25 (火) 17:58:02)
- 13 (2011-03-01 (火) 15:12:21)
- 14 (2011-03-01 (火) 16:48:43)
- 15 (2011-03-02 (水) 14:10:35)
- 16 (2011-03-02 (水) 18:05:29)
- 17 (2013-04-04 (木) 02:36:02)
- 18 (2013-08-16 (金) 16:26:15)
- 19 (2013-08-17 (土) 01:07:25)
- 20 (2013-10-12 (土) 20:11:33)
- 21 (2014-11-26 (水) 18:28:10)
- 22 (2015-03-27 (金) 21:46:48)
- 23 (2017-02-16 (木) 21:17:38)
- 24 (2017-11-21 (火) 18:30:18)
- 25 (2018-02-27 (火) 14:23:56)
- 26 (2020-03-05 (木) 17:19:59)
- 27 (2021-08-12 (木) 14:12:29)
TITLE:JTableの行を移動
Posted by aterai at 2004-02-23
JTableの行を移動
ツールバーや、ポップアップメニューを使って、JTableの行を上下に移動します。
- &jnlp;
- &jar;
- &zip;
サンプルコード
class DownAction extends AbstractAction{
public DownAction(String str) {
super(str);
}
public void actionPerformed(ActionEvent evt) {
downActionPerformed(evt);
}
}
private void downActionPerformed(ActionEvent e) {
System.out.println("-------- 下へ --------");
int[] pos = table.getSelectedRows();
if(pos==null || pos.length<=0) return;
DefaultTableModel mdl = (DefaultTableModel) table.getModel();
if((e.getModifiers() & ActionEvent.SHIFT_MASK)!=0) {
mdl.moveRow(pos[0], pos[pos.length-1], mdl.getRowCount()-pos.length);
table.setRowSelectionInterval(mdl.getRowCount()-pos.length,
mdl.getRowCount()-1);
}else{
if(pos[pos.length-1]==mdl.getRowCount()-1) return;
mdl.moveRow(pos[0], pos[pos.length-1], pos[0]+1);
table.setRowSelectionInterval(pos[0]+1, pos[pos.length-1]+1);
}
scrollSelectedRow();
}
public void showRowPop(MouseEvent e) {
int row = table.rowAtPoint(e.getPoint());
int count = table.getSelectedRowCount();
int[] ilist = table.getSelectedRows();
boolean flg = true;
for(int i=0;i<ilist.length;i++) {
if(ilist[i]==row) {
flg = false;
break;
}
}
if(row>0 && flg) table.setRowSelectionInterval(row, row);
JPopupMenu pop = new JPopupMenu();
Action act = new TestCreateAction("追加", null);
act.setEnabled(count==1);
pop.add(act);
pop.addSeparator();
act = new DeleteAction("削除", null);
act.setEnabled(row>=0);
pop.add(act);
pop.addSeparator();
act = new UpAction("上へ");
act.setEnabled(count>0);
pop.add(act);
act = new DownAction("下へ");
act.setEnabled(count>0);
pop.add(act);
pop.show(e.getComponent(), e.getX(), e.getY());
}
解説
上記のサンプルでは、DefaultTableModel#moveRowメソッドを使用して、選択した行を上下に動かしています。シフトキーを押しながら、ツールバーの移動ボタンを押すとそれぞれ、先頭、末尾に移動します。
コメント
- いつもお世話になっております。違うカテゴリに投稿して、すみません。jTableのカラムの幅をマウスで広げたり、縮んだりする際、イベントで検出し、その幅を変数に取っておく方法はご存知でしょうか?当方はJDK1.5を使っています。よろしくお願いいたします。 -- Panda?
- こんばんは。TableColumnModelListenerを使うのはどうでしょうか。 -- aterai
final TableColumnModel cm = table.getColumnModel(); cm.addColumnModelListener(new TableColumnModelListener() { @Override public void columnAdded(TableColumnModelEvent e) {} @Override public void columnMarginChanged(ChangeEvent e) { for(int i=0;i<cm.getColumnCount();i++) { TableColumn c = cm.getColumn(i); System.out.println(c.getHeaderValue()+": "+c.getWidth()); } } @Override public void columnMoved(TableColumnModelEvent e) {} @Override public void columnRemoved(TableColumnModelEvent e) {} @Override public void columnSelectionChanged(ListSelectionEvent e) {} });