2016-08-21 13 views
-1

Jtbleで最後の行を削除しようとすると、OutBoundエラーがスローされます。ここ最後の行を削除するエラーJtable

JTableの&のdefaultTableを実装するコード:

ここ
Vector<String> rowOne = new Vector<>(); 
     rowOne.addElement("Harry"); 
     rowOne.addElement("100414"); 
     rowOne.addElement("21"); 
     rowOne.addElement("239438"); 
     rowOne.addElement("24/24/23"); 
     rowOne.addElement("30000"); 

     Vector<String> rowTwo = new Vector<>(); 
     rowTwo.addElement("Gordon"); 
     rowTwo.addElement("34353"); 
     rowTwo.addElement("25"); 
     rowTwo.addElement("2538"); 
     rowTwo.addElement("24/24/23"); 
     rowTwo.addElement("20000"); 

     Vector<Vector> rowData = new Vector<>(); 
     rowData.addElement(rowOne); 
     rowData.addElement(rowTwo); 

     columnNames = new Vector<>(); 
     columnNames.addElement("Name"); 
     columnNames.addElement("Cc"); 
     columnNames.addElement("Age"); 
     columnNames.addElement("Phone"); 
     columnNames.addElement("Date"); 
     columnNames.addElement("Amount"); 


     DefaultTableModel model = new DefaultTableModel(rowData, columnNames); 
     Jtable table = new JTable(model); 

削除コード:

else if (e.getActionCommand().equals("deleteClient")) 
     { 
      if(table.getSelectedRow() != -1) 
      { 
       DefaultTableModel tModel1 = (DefaultTableModel) table.getModel(); 
       int seletedRow = table.getSelectedRow(); 

       tModel1.removeRow(seletedRow); 
      } 

最後のJTableの行を削除するとき、私はdiferentを削除するときにエラーが、ちょうどスローされます行が最初のものか中間のものか、エラーはスローされません。どのように解決できますか?あなたが最後の行を削除すると

+0

あなたのインデックスを確認しました:この新しく選択した行の情報を表示するラベル?選択した行番号を表示しましたか?モデルの行数を表示しましたか?他の行に対しても機能する場合は、最後の行でも機能します。以下は、1つ(またはそれ以上)の選択された行を削除するための実例です:http://stackoverflow.com/questions/37417494/how-do-i-make-swing-delete-anentent-from-a-テーブルによる選択行とクリック/ 37419226#37419226 – camickr

+0

選択した行番号を表示するとどういう意味ですか? – Cohen

+0

私が言及したように、それは最後のものを除くすべての行に対してうまく動作します。 – Cohen

答えて

2

あなたは問題だが、ライン

tModel1.removeRow(seletecdRow); 

しかし

int selectedRow = table.getSelectedRow(); 
int selectedCol = table.getSelectedColumn(); 
tModel1.removeRow(selectedRow); 
String name = (String) tModel1.getValueAt(seletecdRow, seletecdCol); // Here 

ではありませんが、あなたはselectedRowに格納インデックスが有効ではありません。また、行を削除するたびに選択解除されるため、table.getSelectedRow()は-1を返します(行が選択されていないため)。あなたが(3にインデックス0)4を行ごとに1から任意の行を選択して削除することができます

は、あなたが5行を持っているとしましょう。 selectedRow = 0,1,2 or 3とまだあなたが(インデックス4で最後の行、)行5を選択した場合

に動作します。しかし、インデックス0、1、2または3とmodel.getValueAt(selectedRow...に行が存在するので、あなたは、4行が残っているし、それを削除します。 selectedRow = 4と4行(インデックス0,1,2,3)が残っていますが、インデックス4には行がなくなります。model.getValueAt(selectedRow...はエラーを出力します

解決方法は、実行しようとするものによって異なりますその行を削除した後のラベルに追加します。

  • あなたは、削除された行の情報を表示するラベルを設定しようとしている場合:あなたは、テーブル内の別の行を再選択して設定しようとしている場合

    String name = (String) tModel1.getValueAt(table.getSelectedRow(), table.getSelectedColumn()); 
    labelStatus.setText(name); 
    tModel1.removeRow(table.getSelectedRow()); 
    
  • int selectedRow = table.getSelectedRow(); 
    tModel1.removeRow(selectedRow); 
    int numRowsLeft = tModel1.getRowCount(); 
    if (numRowsLeft > 0) { // only reset selection if table is not empty 
        if (selectedRow > numRowsLeft - 1) { // last row deleted, new selection will be new last row 
         table.setRowSelectionInterval(numRowsLeft-1, numRowsLeft-1); 
        } else { // deleted from the start or middle, selectedRow now points to the next row after the deleted row 
         table.setRowSelectionInterval(selectedRow, selectedRow); 
        } 
        String name = (String) tModel1.getValueAt(table.getSelectedRow(), table.getSelectedColumn()); 
        labelStatus.setText(name); 
    } 
    
関連する問題