2016-10-13 8 views
0

enter image description herejavafxのTableviewでセルの位置を変更してsr.noを並べ替えることはできますか?セルの位置が変更された場合は、私たちのためにそれが可能position.isを変化させながら、セル位置を変えながら

私は

ことをやりたい、シリアル番号が順次自体によって再オーダーになるだろう。.. .serialない列は例えばテーブルビュー

itself..inによって並べ替えないであろう..と仮定デアフィールド名(として5行である:Sr.noとしてF1:2と1、F2、F3 3、F4として4として、F5は5)f1が下のボタンをクリックすると第2位に移動すると、f1 srnoは2なり、f2は、セルをシフトした後、動的1あろう..

またはボタンアップのクリックに上向きの位置へF5移動した場合、次にF5用srno 4およびF4 srnoが5になるとなる..

親切に私に論理を教えてください。

私のコード:

ReadOnlyIntegerProperty selectedIndex = tableupdateSpacee.getSelectionModel().selectedIndexProperty(); 

    upaction.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent evt) { 
       int index = tableupdateSpacee.getSelectionModel().getSelectedIndex(); 
       // swap items 
       tableupdateSpacee.getItems().add(index-1, tableupdateSpacee.getItems().remove(index)); 
       // select item at new position 
       tableupdateSpacee.getSelectionModel().clearAndSelect(index-1); 
       int a=colFieldSrno.getCellData(index); 
       colFieldSrno.setCellValueFactory(new PropertyValueFactory<>("srno")); 
       System.out.println("col serial number"+colFieldSrno.getCellData(index)); 

       // tableupdateSpacee.getColumns().add(colFieldSrno.getCellData(index)); 




       tableupdateSpacee.setItems(modelUpdateSpace); 
       tableupdateSpacee.refresh(); 
      } 
     }); 

    downaction.setOnAction(evt -> { 
     int index = tableupdateSpacee.getSelectionModel().getSelectedIndex(); 
     // swap items 
     tableupdateSpacee.getItems().add(index+1, tableupdateSpacee.getItems().remove(index)); 
     // select item at new position 
     tableupdateSpacee.getSelectionModel().clearAndSelect(index+1); 


     tableupdateSpacee.refresh(); 
    }); 
+1

'srNo'カラムに'(index + 1) 'と表示させたいのですが' index'は行番号ですか? –

+0

はい、私は行を下向きの位置に移動するとインデックス+1になり、上向きの位置についてはインデックス-1になります。 –

+0

あなたがそれを移動するとインデックスが変わると思いますので、 + 1 '、いいえ?ここには本当に財産は必要ありません。 –

答えて

1

あなたはすべてのあなたのテーブルモデルでsrNo性質を持たずにこれを行うことができます。ただ、やる:

TableColumn<S,Void> colFieldSrno = new TableColumn<>("Sr.No"); 
colFieldSrNo.setCellFactory(tc -> new TableCell<S,Void>() { 
    @Override 
    public void updateIndex(int index) { 
     super.updateIndex(index); 
     if (index < 0 || index >= tableupdateSpacee.getItems().size()) { 
      setText(null); 
     } else { 
      setText(Integer.toString(index+1)); 
     } 
    } 
}); 

(ここではあなたがあなたのテーブルモデルとして使用しているものは何でもクラスでSを交換する必要があります)。テーブルのモデルからsrNoプロパティを削除します

(あなたが本当にすべてでそれを必要はありませんが)あなたが他の理由srNoプロパティが必要な場合は、その後、あなたはちょうどあなたが値を交換するとき、それを更新する必要があります。

ため
upaction.setOnAction(new EventHandler<ActionEvent>() { 

    @Override 
    public void handle(ActionEvent evt) { 
     int index = tableupdateSpacee.getSelectionModel().getSelectedIndex(); 
     // swap items 

     S item = tableupdateSpacee.getItems().get(index); 
     S previousItem = tableUpdateSpacee.getItems().get(index - 1); 
     previousItem.setSrNo(index); 
     item.setSrNo(index-1); 
     tableupdateSpacee.getItems().remove(index); 
     tableupdateSpacee.getItems().add(index-1, item); 
     // select item at new position 
     tableupdateSpacee.getSelectionModel().clearAndSelect(index-1); 
    } 
}); 

と同様にdownaction

+0

ありがとう返信のために..試して、ここに戻ってくるだろう.. @ James_D –

+0

ありがとうたくさん..あなたは私を救った..それは完全に働いている..あなたは男だ:) –

+0

こんにちは、私はこの変更を反映したいデータベースも。それはちょうどtableviewのGUI内のセルの位置を変更します。しかし、その変更を反映していない...データベースの位置を変更する方法はありますか?テーブルビューのGUIで変更されている方法。 –

関連する問題