2009-10-04 9 views
8

内の行を移動すると、どのようにしてROW1ROW2に行くようjTableで行を移動の位置とROW2ROW1に行くの立場ができますか?JTableの

答えて

9

DefaultTableModelmoveRow(...)メソッドを使用します。

DefaultTableModelを使用していない場合は、カスタムモデルにsimliarメソッドを実装します。

+0

ありがとうございました。コードスニペット、plzを提供できますか? – Attilah

+0

リンクがあることに気付かなかった。それは役に立ちました。ありがとう。 – Attilah

+0

このリンクは古いです –

0
TableModel model = jTable.getModel(); 
for(int col=0; col<model.getColumnCount(); col++) { 
    Object o1 = model.getValueAt(row1, col); 
    Object o2 = model.getValueAt(row2, col); 
    model.setValueAt(o1, row2, col); 
    model.setValueAt(o2, row1, col); 
} 
2

ここで私のコードは私がこの質問の答えを使って開発したものです。 これらの機能を使用すると、一度に複数の行を選択し、JTableで上下に移動できます。私はJButtonにそれらの機能を付けましたが、私はそれらを読みやすくするためにそれらをきれいにします。

両方のメソッド(setRowSelectionInterval())の最後のコード行は、移動する行の選択に従います。moveRow()は選択内容を移動するのではなく行の内容を移動するためです。

public void moveUpwards() 
{ 
    moveRowBy(-1); 
} 

public void moveDownwards() 
{ 
    moveRowBy(1); 
} 

private void moveRowBy(int by) 
{ 
    DefaultTableModel model = (DefaultTableModel) table.getModel(); 
    int[] rows = table.getSelectedRows(); 
    int destination = rows[0] + by; 
    int rowCount = model.getRowCount(); 

    if (destination < 0 || destination >= rowCount) 
    { 
     return; 
    } 

    model.moveRow(rows[0], rows[rows.length - 1], destination); 
    table.setRowSelectionInterval(rows[0] + by, rows[rows.length - 1] + by); 
}