Swing/AddRow のバックアップの現在との差分(No.1)
JTableの行を追加、削除
編集者:Terai Atsuhiro~
作成日:2004-06-04
更新日:2023-11-24 (金) 16:03:10
概要
JTable
への行追加と、選択行の削除をJPopupMenu
から実行します。
Screenshot
Advertisement
概要
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
メソッドを使用しオブジェクトの配列を行として追加 - 追加された行が表示されるように
JTable#getCellRect(...)
で行の領域を取得しJTable#scrollRectToVisible(...)
でスクロール
-
- 削除
- 複数行の削除に対応するため
index
の大きい方から削除する - 行がソートされている場合を考慮して
JTable#convertRowIndexToModel(int)
メソッドでviewIndex
をmodelIndex
に変換してからDefaultTableModel#removeRow(int modelIndex)
を使って削除
- 複数行の削除に対応するため