/ / Podemos reordenar o sr.no enquanto mudamos a posição da célula no Tableview em javafx? - javafx

Podemos reordenar o sr.no enquanto mudamos a posição da célula no Tableview em javafx? - javafx

insira a descrição da imagem aqui

eu quero fazer isso

Se a posição da célula mudou, o número de sérieiria se re-ordenar por si só sequencialmente enquanto mudava a posição.é possível para nós enquanto mudamos a posição da célula ... serial nenhuma coluna iria reordenar por si só..no TABLEVIEW

Por exemplo .. Suponha que der são cinco linhas como (Nome do campo: F1 como Sr.no: 1, F2 como 2, F3 como 3, F4 como 4, F5 como 5) se f1 passar para o segundo lugar ao clicar no botão para baixo então f1 srno se tornaria 2 e f2 seria 1 dinamicamente depois de mudar a célula ..

ou se f5 se mover para a posição para cima ao clicar no botão para cima, então srno para f5 se tornaria 4 e f4 srno se tornaria 5 ..

Por favor, me forneça uma lógica para isso?

meu código:

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();
});

Respostas:

1 para resposta № 1

Você pode fazer isso sem ter um srNo propriedade em seu modelo de tabela em tudo. Apenas faça:

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));
}
}
});

(aqui você precisa substituir S com qualquer classe que você esteja usando como seu modelo de tabela). Remova o cellValueFactory para a coluna inteiramente (o valor é basicamente o índice, não faz parte do seu modelo de tabela) e remova srNo propriedade do modelo de tabela.

Se você precisar do srNo propriedade por outras razões (embora você realmente não precise disso), então você só precisa atualizá-lo quando trocar os valores:

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);
}
});

e da mesma forma para o downaction.