JavaFX ComboBoxTableCell

0

Cześć!

Staram się, ale nie potrafię zrozumieć jak to nie działa. Mam TableView i edytuje komórkę tworząc combobox. Edycja odbywa się tylko dla tych komórek gdzie User nie jest Adminem lub SuperAdminem. Wszystko działa, ale żeby pojawił się combobox najpierw muszę zaznaczyć komórkę w której jest admin. Później działa już wszystko na wszystkich innych komórkach bez przeszkód. Kod:

		userRule.setEditable(true);
		userRule.setOnEditStart(e ->{
			if(e.getOldValue().equals(RuleEnum.Admin.toString()) || e.getOldValue().equals(RuleEnum.SuperAdmin.toString())) {
				userRule.setCellFactory(ComboBoxTableCell.forTableColumn(FXCollections
		                .observableArrayList(RuleEnum.Lider.toString(), RuleEnum.Konsultant.toString())));
					userRule.setOnEditCommit(event -> {
							AdminSQL sql = new AdminSQL();
							try {
								sql.changeRule(userTable.getSelectionModel().getSelectedItem().getUserLp(), event.getNewValue().toString());
							} catch (SQLException ex) {System.out.println(ex.getMessage());ex.printStackTrace();}	
					});
			}
		});
0

Cześć,
możesz dokładniej wytłumaczyć problem? Chodzi o to, że musisz kliknąć na tą komórkę, żeby ComboBox się pojawił? Nic dziwnego, działasz na eventach onEdit. Ale nie wiem czy to dokładnie o to chodzi. Chętnie pomogę, ale jak możesz to wytłumacz dokładniej problem proszę.
Pozdrawiam,
adaszewski95

0

Mam tableView i wymyśliłem sobie, że admin będzie mógł zmienić rolę użytkownika w systemie poprzez kliknięcie w komórkę i wtedy pojawi mu się comboBox z listą wyboru odpowiednich ról. Wszystko działa pięknie bez problemu tylko, nie można zmienić roli gdy użytkownik ma uprawnienia Admina i SuperAdmina. Mógłbym tych użytkowników nie wczytywać do bazy, ale to nie jest rozwiązanie bo może będą mi potrzebni kiedyś. Dlatego comboBox wyświetla się tylko dla użytkowników którzy nie są adminami. I tu też wszystko pięknie mi działa, ale żeby pojawiła się opcja wyboru roli po raz pierwszy najpierw muszę dwa razy kliknąć w jakiegoś admina. Inaczej dla innych użytkowników nie wyświetla się lista. Później już działa wszystko dobrze. To nie jest jakiś tam zwykły błąd bo gdyby kod był zły to nigdy by się to nie wyświetliło. Nie wiem czy to jakiś bug ale tak wygląda.... może istnieje inne podejście do tego tematu

0

Dobry wieczór,
Moim zdaniem źle ustawiasz CellValueFactory. Wskaż, na który tableColumn ma być ten comboBox. Kiedyś w jednym projekcie miałem coś podobnego, tylko że z CheckBoxTableCell. Spróbuj takiego obejścia:

    userRule.setCellValueFactory(cellValue -> {
        return cellValue.getValue().getIsAdmin();
    });
 userRule.setCellFactory(ComboBoxTableCell.forTableColumn(userRule));

Jeżeli user jest adminem (ewentualnie dorób do SuperAdmina) to dla niego zaśmiga ta kolumienka. Wymaga to niestety dodanie do modelu kolejnego BooelanProperty sprawdzającego, co nie jest najbardziej optymalnym rozwiązaniem, ale prawdopodobnie masz powinieneś mieć coś takiego. Poeksperymentuj i daj znać jak wyszło, bo z tabelami w JavaFX gryzę się najbardziej.

Pozdrawiam,
adaszewski95

1 użytkowników online, w tym zalogowanych: 0, gości: 1