TITLE:JTableの行を追加、削除
#navi(../)
#tags()
RIGHT:Posted by &author(aterai); at 2004-05-03
*JTableの行を追加、削除 [#o1339781]
JTableで行の追加と削除を行います。

-&jnlp;
-&jar;
-&zip;

//#screenshot
#ref(http://lh4.ggpht.com/_9Z4BYR88imo/TQTHaSWCCMI/AAAAAAAAARI/UM476TJWRdM/s800/AddRow.png)

**サンプルコード [#a48c4459]
#code(link){{
private final DefaultTableModel model = new DefaultTableModel();
private final JTable table;

private void createActionPerformed(ActionEvent e) {
  int rc = model.getRowCount();
  model.addRow(new Object[] {rc, "New name", ""});
  //追加された最終行までスクロール
  table.scrollRectToVisible(table.getCellRect(rc, 0, true));
}

private void deleteActionPerformed(ActionEvent e) {
  int[] selection = table.getSelectedRows();
  if(selection==null || selection.length<=0) return;
  for(int i=selection.length-1;i>=0;i--) {
    model.removeRow(table.convertRowIndexToModel(selection[i]));
  }
}
}}

**解説 [#y17790fd]
上記のサンプルでは、ポップアップメニューを使って、行の追加と削除を行っています。

-追加
-- DefaultTableModelのaddRowメソッドを使用し、オブジェクトの配列を行として追加
-- 追加された行が表示されるように、getCellRectで行の領域を取得し、scrollRectToVisibleでスクロール

- 削除
-- 複数行の削除に対応するために、indexの大きい方からremoveRowメソッドを使用
-- 行のソートを行っている可能性があるので、JTable#convertRowIndexToModel(int)で、viewIndexをmodelIndexに変換してからDefaultTableModel#removeRow(int modelIndex)で削除

**参考リンク [#ic4670f1]
-[[JTableのセルにJButtonを追加して行削除>Swing/DeleteButtonInCell]]
-[[JTableの行を全削除>Swing/ClearTable]]
-[[JTableで行の追加、削除アニメーション>Swing/SlideTableRows]]

**コメント [#nce8b0f0]
#comment