TITLE:JTableの行を移動

JTableの行を移動

編集者:Terai Atsuhiro~

作成日:2004-02-23
更新日:2021-08-12 (木) 14:12:29
  • category: swing folder: MoveRow title: JTableの行を移動 tags: [JTable, JPopupMenu, JToolBar] author: aterai pubdate: 2004-02-23 description: ツールバーや、ポップアップメニューを使って、JTableの行を上下に移動します。 image: https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTQMwXadCI/AAAAAAAAAfM/mZbfFQ513GI/s800/MoveRow.png

概要

ツールバーや、ポップアップメニューを使って、JTableの行を上下に移動します。

概要

ツールバーや、ポップアップメニューを使って、JTableの行を上下に移動します。

サンプルコード

#spanend
#spanadd
class DownAction extends AbstractAction {
#spanend
  public DownAction(String str) {
    super(str);
  }

#spandel
#screenshot
#spanend
  @Override public void actionPerformed(ActionEvent e) {
    downActionPerformed(e);
  }
#spanadd
}
#spanend

#spandel
**サンプルコード [#yc463e85]
#spanend
 class DownAction extends AbstractAction{
   public DownAction(String str) {
     super(str);
   }
   public void actionPerformed(ActionEvent evt) {
     downActionPerformed(evt);
   }
 }
 private void downActionPerformed(ActionEvent e) {
   Logger.global.info("-------- 下へ --------");
   int[] pos = jtable.getSelectedRows();
   if(pos==null || pos.length<=0) return;
   DefaultTableModel mdl = (DefaultTableModel) jtable.getModel();
   if((e.getModifiers() & ActionEvent.SHIFT_MASK)!=0) {
     mdl.moveRow(pos[0], pos[pos.length-1], mdl.getRowCount()-pos.length);
     jtable.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);
     jtable.setRowSelectionInterval(pos[0]+1, pos[pos.length-1]+1);
   }
   scrollSelectedRow();
 }
 
 public void showRowPop(MouseEvent e) {
   int row     = jtable.rowAtPoint(e.getPoint());
   int count   = jtable.getSelectedRowCount();
   int[] ilist = jtable.getSelectedRows();
   boolean flg = true;
   for(int i=0;i<ilist.length;i++) {
     if(ilist[i]==row) {
       flg = false;
       break;
     }
   }
   if(row>0 && flg) jtable.setRowSelectionInterval(row, row);
   JPopupMenu pop = new JPopupMenu();
   Action act = new TestCreateAction("追加", null);
   act.setEnabled(count>1?false:true);
   pop.add(act);
   pop.addSeparator();
   act = new DeleteAction("削除", null);
   act.setEnabled(row<0?false:true);
   pop.add(act);
   pop.addSeparator();
   act = new UpAction("上へ");
   act.setEnabled(count>0?true:false);
   pop.add(act);
   act = new DownAction("下へ");
   act.setEnabled(count>0?true:false);
   pop.add(act);
   pop.show((JComponent)e.getSource(), e.getX(), e.getY());
 }
#spanadd
private void downActionPerformed(ActionEvent e) {
#spanend
  System.out.println("-------- 下へ --------");
  if (table.isEditing()) {
    table.getCellEditor().stopCellEditing();
  }
  int[] pos = table.getSelectedRows();
  if (pos.length == 0) {
    return;
  }
  RowDataModel model = (RowDataModel) table.getModel();
  boolean isShiftDown = (e.getModifiers() & ActionEvent.SHIFT_MASK) != 0;
  if (isShiftDown) { // Jump to the end
    model.moveRow(pos[0], pos[pos.length - 1], model.getRowCount() - pos.length);
    table.setRowSelectionInterval(model.getRowCount() - pos.length, model.getRowCount() - 1);
  } else {
    if (pos[pos.length - 1] == model.getRowCount() - 1) {
      return;
    }
    model.moveRow(pos[0], pos[pos.length - 1], pos[0] + 1);
    table.setRowSelectionInterval(pos[0] + 1, pos[pos.length - 1] + 1);
  }
  Rectangle r = table.getCellRect(model.getRowCount() - 1, 0, true);
  table.scrollRectToVisible(r);
#spanadd
}
#spanend

-&jnlp;
-&jar;
-&zip;
#spanadd
public void showRowPop(MouseEvent e) {
#spanend
  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());
#spanadd
}
#spanend
#spanadd
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、DefaultTableModel#moveRowメソッドを使用して、選択した行を上下に動かしています。シフトキーを押しながら、ツールバーの移動ボタンを押すとそれぞれ、先頭、末尾に移動します。

解説

上記のサンプルでは、DefaultTableModel#moveRow(...)メソッドを使用して選択した行を上下に動かしています。Shiftキーを押しながらツールバーの移動ボタンを押すとそれぞれ、先頭、末尾に移動します。

コメント

参考リンク

コメント