TITLE:JTableの行を追加、削除

JTableの行を追加、削除

編集者:Terai Atsuhiro~

作成日:2004-06-04
更新日:2023-11-24 (金) 16:03:10
  • category: swing folder: AddRow title: JTableの行を追加、削除 tags: [JTable, JPopupMenu] author: aterai pubdate: 2004-05-03T19:35:45+09:00 description: JTableへの行追加と、選択行の削除をJPopupMenuから実行します。 image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTHaSWCCMI/AAAAAAAAARI/UM476TJWRdM/s800/AddRow.png

概要

JTableへの行追加と、選択行の削除をJPopupMenuから実行します。

概要

JTableで行の追加と削除を行います。

サンプルコード

#spanend
#spanadd
private final DefaultTableModel model = new DefaultTableModel();
#spanend
#spanadd
private final JTable table;
#spanend

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

#spandel
**サンプルコード [#a48c4459]
#spanend
 public class TestModel extends DefaultTableModel {
   public void addTest(Test tst) {
     Object[] obj = {new Integer(number), tst.getName(), tst.getComment()};
     super.addRow(obj);
     number++;
     fireTableDataChanged();
   }
 以下省略
#spanadd
private void deleteActionPerformed(ActionEvent e) {
#spanend
  int[] selection = table.getSelectedRows();
  for (int i = selection.length - 1; i >= 0; i--) {
    model.removeRow(table.convertRowIndexToModel(selection[i]));
  }
#spanadd
}
#spanend
#spanadd
View in GitHub: Java, Kotlin
途中から
private final TestModel model = new TestModel();
private final TestRenderer renderer = new TestRenderer();
private final TableSorter sorter;
private final JTable table;
private void testCreateActionPerformed(ActionEvent e) {
  model.addTest(new Test("新規の名前", ""));
  //追加された最終行までスクロール
  Rectangle rect = table.getCellRect(model.getRowCount()-1,0,true);
  table.scrollRectToVisible(rect);
  table.repaint();
}
private void deleteActionPerformed(ActionEvent evt) {
  int[] ilist = table.getSelectedRows();
  if(ilist==null || ilist.length<=0) return;
  for(int i=ilist.length-1;i>=0;i--) {
    model.removeRow(sorter.modelIndex(ilist[i]));
  }
  table.repaint();
}
以下省略

解説

上記のサンプルでは、ポップアップメニューを使用して行の追加と削除を行っています。
  • &jnlp;
  • &jar;
  • &zip;

解説

上記のサンプルでは、ポップアップメニューを使って、行の追加と削除を行っています。
  • 追加
    • DefaultTableModelのaddRowメソッドを使用し、オブジェクトの配列を行として追加しています。
    • 追加された行が表示されるように、getCellRectで行の領域を取得し、scrollRectToVisibleでそこまでスクロールさせています。
  • 追加
    • DefaultTableModeladdRowメソッドを使用しオブジェクトの配列を行として追加
    • 追加された行が表示されるようにJTable#getCellRect(...)で行の領域を取得しJTable#scrollRectToVisible(...)でスクロール
  • 削除
    • 複数行の削除に対応するために、indexの大きい方からremoveRowメソッドを使用しています。
    • 行のソートを行っている場合は、TableSorterのmodelIndexメソッドを挟む必要があります。
    • 複数行の削除に対応するためindexの大きい方から削除する
    • 行がソートされている場合を考慮してJTable#convertRowIndexToModel(int)メソッドでviewIndexmodelIndexに変換してからDefaultTableModel#removeRow(int modelIndex)を使って削除

参考リンク

参考リンク

コメント

コメント