JavaFX, TableView Model

0 értékelés
119 megtekintés
Ivo (36 pont) kérdezte 2019. Már 4.
Ivo szerkesztett 2019. Már 14.

Sziasztok,

Van egy Táblám, van hozzá két gomb a sorok fel-le mozgatásához:

upButton.setOnAction(evt -> { int index = extruderTableView.getSelectionModel().getSelectedIndex(); extruderTableView.getItems().add(index - 1, extruderTableView.getItems().remove(index)); extruderTableView.getSelectionModel().clearAndSelect(index - 1); }); 

downButton.setOnAction(evt -> { int index = extruderTableView.getSelectionModel().getSelectedIndex(); extruderTableView.getItems().add(index + 1, extruderTableView.getItems().remove(index)); extruderTableView.getSelectionModel().clearAndSelect(index + 1); });

A cél az lenne hogy az egyik oszlopba lévő számok fel legyenek cserélve hívjuk őt  TableColumn<Extruder, Integer> priority Pl.: fel 3->2 ami eddig 3 volt az 2 legyen ami 2 volt 3 legyen.
A tábla változást itt vizsgálom:

extruderTableView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Extruder>() {
@Override
public void changed(ObservableValue<? extends Extruder> observable, Extruder oldValue, Extruder newValue) {
if (oldValue != null && newValue != null) {
}
}
});
Ha setternek newValue.setExtruderPriority() át adom a oldValue.getExtruderPriority() értékét akkor lényegében nem csinálok semmit.
Előre is köszönöm 


Update

Ez így működik, de ngyon csúnya.

-kiválaszott sor inedexét átadom int-nek

-ugyan ez csak egy pojo-nak adom át

-léptetés fel -1 indexel

-és, tableDataBase egyből mentem az adatbázisba id alapján

- végén egy adatbázis hívást csinálok hogy megkapjam a változást.

Mükődik, de.. nem szép


upButton.setOnAction(evt -> {
int index = extruderTableView.getSelectionModel().getSelectedIndex();
Extruder actual = extruderTableView.getSelectionModel().getSelectedItem();
extruderTableView.getItems().add(index - 1, extruderTableView.getItems().remove(index));
extruderTableView.getSelectionModel().clearAndSelect(index - 1);
tableDataBase.updateExtruderPriorit(actual.getExtruderId(),
extruderTableView.getItems().get(index).getExtruderPriority());
tableDataBase.updateExtruderPriorit(extruderTableView.getItems().get(index).getExtruderId(),
actual.getExtruderPriority());
updateDataTable();
});

2 Válasz

0 értékelés
g13t4 Haladó Felhasználó (243 pont) válaszolta meg 2019. Már 10.
Csatolnál/linkelnél egy teljes forráskódot?
0 értékelés
Ivo (36 pont) válaszolta meg 2019. Már 12.

Tehát azt szeretném elérni hogy ennek az oszlopnak az értékeit felcserélni. 

És sajna ezt nem tudom merre tovább miképp vizsgáljam az adott column (Priorítás).

Button upButton = new Button("Up"); Button downButton = new Button("Down"); upDownHBox.getChildren().addAll(upButton, downButton); ReadOnlyIntegerProperty selectedIndex = extruderTableView.getSelectionModel().selectedIndexProperty(); upButton.disableProperty().bind(selectedIndex.lessThanOrEqualTo(0)); downButton.disableProperty().bind(Bindings.createBooleanBinding(() -> { int index = selectedIndex.get(); return index < 0 || index + 1 >= extruderTableView.getItems().size(); }, selectedIndex, extruderTableView.getItems())); 

upButton.setOnAction(evt -> { int index = extruderTableView.getSelectionModel().getSelectedIndex(); extruderTableView.getItems().add(index - 1, extruderTableView.getItems().remove(index)); extruderTableView.getSelectionModel().clearAndSelect(index - 1); });

downButton.setOnAction(evt -> { int index = extruderTableView.getSelectionModel().getSelectedIndex(); extruderTableView.getItems().add(index + 1, extruderTableView.getItems().remove(index)); extruderTableView.getSelectionModel().clearAndSelect(index + 1); });

extruderPriority = new TableColumn<>("Priorítás");
extruderPriority.setMinWidth(80);
extruderPriority.setCellValueFactory(new PropertyValueFactory<Extruder, String>("extruderPriority"));
extruderPriority.setCellFactory(TextFieldTableCell.forTableColumn());
...