Wyświetlanie danych JavaFX

Wyświetlanie danych JavaFX
Z6
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 8 lat
  • Postów:233
0

Witam po raz kolejny, mam TableView, który wyświetla mi Imie, nazwisko i email.
Po kliknięciu na wybrany rekord z tabeli chcę by po prawej stronie (jak na zdjęciu) wyświetlały się rekordy z detalami ( imie nazwisko email login hasło i uprawnienia)

Kopiuj
 
	private void pokazDetaleUsera() {
		
		if (tv_user.getSelectionModel().getSelectedItem() != null) {
			l_imie.setText(user.getFirstName());
			l_nazwisko.setText(user.getLastName());
			l_email.setText(user.getEmail());
			l_login.setText(user.getLogin());
			l_haslo.setText(user.getPassword());
			l_uprawnienia.setText(user.getPermissions());
		} else {
			l_imie.setText("");
			l_nazwisko.setText("");
			l_email.setText("");
			l_login.setText("");
			l_haslo.setText("");
			l_uprawnienia.setText("");
		}
	}

Niestety tak się nie dzieje, nic się nie wyświetla, ktoś może mi podpowiedzieć gdzie robię błąd? l_imie itd to są labelki

user image

Z6
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 8 lat
  • Postów:233
0
Kopiuj
		
pokazDetaleUsera(null);
tv_user.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> pokazDetaleUsera(newValue));

już sobie poradziłem. Jakby ktoś chciał odpowiedź na moje pytanie ^

Z6
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 8 lat
  • Postów:233
0

Mam jeszcze jedno pytanie, ostatnie na dziś. Tamto u góry mi poszło, tak jak na zdjęciu, lecz teraz chciałbym zrobić by po przyciśnięciu przycisku otwierało się nowe okienko z uzupełnionymi TextFieldami, gdy zaznaczę jakiś rekord z tabeli to pojawiły się te dane tam, w celu edycji.

user image

Napisałem nowy kontroller, ale nie działa jak powinno, nie kopiuje danych z tabeli w pola. Jak rozwiązać ten problem ?

Kod kontrolera:

Kopiuj
 

public class EditUserPanelController implements Initializable {

	@FXML
	private TextField tf_imie;

	@FXML
	private Button btnZapisz;

	@FXML
	private TextField tf_haslo;

	@FXML
	private ComboBox<String> cb_uprawnienia;

	@FXML
	private TextField tf_login;

	@FXML
	private TextField tf_email;

	@FXML
	private Button btnAnuluj;

	@FXML
	private TextField tf_nazwisko;

	private User userDoEdycji;

	final ObservableList<String> uprawnienia = FXCollections
			.observableArrayList("Administrator", "Kierownik", "Użytkownik");

	public User getUserDoEdycji() {
		return userDoEdycji;
	}

	public void setUserDoEdycji(User userDoEdycji) {
		this.userDoEdycji = userDoEdycji;
	}

	@Override
	public void initialize(URL location, ResourceBundle resources) {
		cb_uprawnienia.setItems(uprawnienia);
		konfigurujPrzyciski();
		User user = (User) ZmianaSceny.object;
		if (user != null) {
		tf_imie.setText(user.getFirstName());
		tf_nazwisko.setText(user.getLastName());
		tf_email.setText(user.getEmail());
		tf_login.setText(user.getLogin());
		tf_haslo.setText(user.getPassword());
		cb_uprawnienia.setValue(user.getPermissions());
		
		
	}
	}
}

Gjorni
  • Rejestracja:około 12 lat
  • Ostatnio:około 3 lata
0

Stwórz sobie klasę SelectedUser, która będzie miała zdefiniowane pola dla danych użytkownika i przy zaznaczeniu wiersza w tabeli uzupełniaj te pola, po czym korzystaj z ich zawartości przy kliknięciu przycisku Edytuj.


The quieter you become, the more you are able to hear.
Z6
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 8 lat
  • Postów:233
0

już piszę Twoją myśl do eclipsa, daj mi trochę czasu. :P

Z6
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 8 lat
  • Postów:233
0

hmm tylko ja mam już podobną klasę do tego co Ty piszesz w klasie poprzedzającej zobacz.

Kopiuj
	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
		// TODO Auto-generated method stub
		konfigurujPrzyciski();
		konfigurujWidokTabeli();
		pokazDetaleUsera(null);
		tv_user.getSelectionModel()
				.selectedItemProperty()
				.addListener(
						(observable, oldValue, newValue) -> pokazDetaleUsera(newValue));
	}



private void pokazDetaleUsera(User user) {
		if (user != null) {
			l_imie.setText(user.getFirstName());
			l_nazwisko.setText(user.getLastName());
			l_email.setText(user.getEmail());
			l_login.setText(user.getLogin());
			l_haslo.setText(user.getPassword());
			l_uprawnienia.setText(user.getPermissions());
		} else {
			l_imie.setText("");
			l_nazwisko.setText("");
			l_email.setText("");
			l_login.setText("");
			l_haslo.setText("");
			l_uprawnienia.setText("");
		}

Tylko to uzupełnia mi Labelki tak jak na pierwszym zdjęciu. Czekaj opiszę Ci jak to wygląda z poziomu użytkownika:

Masz opcję w menuBarze edytuj użytkownika, wyświetla Ci się to co na 1 screenie u samej góry, tylko naprawione, zaznaczasz sobie którykolwiek rekord i naciskasz edytuj i pojawia się to co na drugim screenie, ale niestety bez danych. Ta metoda co jest powyżej odpowiada za uzupełnianie danych jak na screenie pierwszym tam gdzie zaznaczyłem okręgiem, a chciałbym by także ona uzupełniała mi dane w tych textfieldach, w kolejnej klasie. Jak ją wykorzystać skoro jest w osobnej klasie?

edytowany 2x, ostatnio: ziben69
Gjorni
  • Rejestracja:około 12 lat
  • Ostatnio:około 3 lata
0

Zakładam, że przy naciśnięciu przycisku Edytuj tworzysz nową instancję obiektu dziedziczącego po Stage. Dodaj w konstruktorze tego obiektu parametr odpowiadający obiektowi User, po czym korzystaj z jego pól do uzupełnienia TextField'ów.

Kopiuj
class Window extends Stage {

	private user;

	public Parent createContent() {

		/* layout i zawartość okna Twojej aplikacji */

		TextField textFieldFirstName = new TextField();
		textField.setText(user.getFirstName());

		/* ... i tak dalej... */
	}

	private Window(User user) {
		this.user = user;

		this.setScene(new Scene(createContent()));
		this.show();
	}
}

The quieter you become, the more you are able to hear.
Z6
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 8 lat
  • Postów:233
0

Pozwól, że Ci pokażę kod tych dwóch klas:
Klasa EditUserController:

Kopiuj
public class EditUserController implements Initializable {

	@FXML
	private TableView<User> tv_user;

	@FXML
	private Label l_uprawnienia;

	@FXML
	private Button btnEdytuj;

	@FXML
	private Label l_imie;

	@FXML
	private TableColumn<?, ?> id_tc;

	@FXML
	private TableColumn<?, ?> imie_tc;

	@FXML
	private TableColumn<?, ?> email_tc;

	@FXML
	private Button btnAnuluj;

	@FXML
	private Label l_haslo;

	@FXML
	private TableColumn<?, ?> nazwisko_tc;

	@FXML
	private Label l_login;

	@FXML
	private Label l_email;

	@FXML
	private Label l_nazwisko;

	public TableView<User> getTv_user() {
		return tv_user;
	}

	public void setTv_user(TableView<User> tv_user) {
		this.tv_user = tv_user;
	}

	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
		// TODO Auto-generated method stub
		konfigurujPrzyciski();
		konfigurujWidokTabeli();
		pokazDetaleUsera(null);
		tv_user.getSelectionModel()
				.selectedItemProperty()
				.addListener(
						(observable, oldValue, newValue) -> pokazDetaleUsera(newValue));
	}

	public TableView<User> getTableViewUser() {
		return tv_user;
	}

	public void konfigurujWidokTabeli() {
		id_tc.setCellValueFactory(new PropertyValueFactory<>("idUser"));
		imie_tc.setCellValueFactory(new PropertyValueFactory<>("firstName"));
		nazwisko_tc.setCellValueFactory(new PropertyValueFactory<>("lastName"));
		email_tc.setCellValueFactory(new PropertyValueFactory<>("email"));

		tv_user.setEditable(true);
		zaladujUserDotabeli();
	}

	public void zaladujUserDotabeli() {
		DostepUser dbUser = new DostepUser();
		ObservableList<User> listaUser = FXCollections
				.observableArrayList(dbUser.pobierzWszystkichUser());
		tv_user.setItems(listaUser);
	}

	private void pokazDetaleUsera(User user) {
		if (user != null) {
			l_imie.setText(user.getFirstName());
			l_nazwisko.setText(user.getLastName());
			l_email.setText(user.getEmail());
			l_login.setText(user.getLogin());
			l_haslo.setText(user.getPassword());
			l_uprawnienia.setText(user.getPermissions());
		} else {
			l_imie.setText("");
			l_nazwisko.setText("");
			l_email.setText("");
			l_login.setText("");
			l_haslo.setText("");
			l_uprawnienia.setText("");
		}
	}

	public void konfigurujPrzyciski() {
		btnEdytuj.setOnAction(new EventHandler<ActionEvent>() {
			@Override
			public void handle(ActionEvent event) {
				ZmianaSceny zs = new ZmianaSceny();
				zs.zmianaSceny("/EditUserPane.fxml", "Edit user");
			}
		});
	}
}

Klasa EditUserPanelController(to okienko z txtfieldami):

Kopiuj
public class EditUserPanelController implements Initializable {

	@FXML
	private TextField tf_imie;

	@FXML
	private Button btnZapisz;

	@FXML
	private TextField tf_haslo;

	@FXML
	private ComboBox<String> cb_uprawnienia;

	@FXML
	private TextField tf_login;

	@FXML
	private TextField tf_email;

	@FXML
	private Button btnAnuluj;

	@FXML
	private TextField tf_nazwisko;

	private User userDoEdycji;

	final ObservableList<String> uprawnienia = FXCollections
			.observableArrayList("Administrator", "Kierownik", "Użytkownik");

	public User getUserDoEdycji() {
		return userDoEdycji;
	}

	public void setUserDoEdycji(User userDoEdycji) {
		this.userDoEdycji = userDoEdycji;
	}

	@Override
	public void initialize(URL location, ResourceBundle resources) {
		cb_uprawnienia.setItems(uprawnienia);
		konfigurujPrzyciski();
		
//TUTAJ GDZIEŚ JEST PROBLEM
                User user = (User) ZmianaSceny.object;
		if (user != null) {
		tf_imie.setText(user.getFirstName());
		tf_nazwisko.setText(user.getLastName());
		tf_email.setText(user.getEmail());
		tf_login.setText(user.getLogin());
		tf_haslo.setText(user.getPassword());
		cb_uprawnienia.setValue(user.getPermissions());	
	}
	}
	public void konfigurujPrzyciski() {
		btnZapisz.setOnAction(new EventHandler<ActionEvent>() {
			@Override
			public void handle(ActionEvent event) {
				ZmianaSceny zs = new ZmianaSceny();
				zs.zmianaSceny("/FXMLAddUser.fxml", "Add user");
			}
		});
	}
}
edytowany 1x, ostatnio: ziben69
Z6
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 8 lat
  • Postów:233
0

Mam coś takiego aktualnie.
Klasa EditUserController:

Kopiuj
	public void pokazDetaleUsera(User user) {
		if (user != null) {
			l_imie.setText(user.getFirstName());
			l_nazwisko.setText(user.getLastName());
			l_email.setText(user.getEmail());
			l_login.setText(user.getLogin());
			l_haslo.setText(user.getPassword());
			l_uprawnienia.setText(user.getPermissions());

		} else {
			l_imie.setText("");
			l_nazwisko.setText("");
			l_email.setText("");
			l_login.setText("");
			l_haslo.setText("");
			l_uprawnienia.setText("");
			selectedItems();
		}
	}

	public void selectedItems() {
		tv_user.getSelectionModel()
				.selectedItemProperty()
				.addListener(
						(observable, oldValue, newValue) -> pokazDetaleUsera(newValue));
	}
 

Klasa EditUserPanelController:

Kopiuj
 
	public void daneDoTextFieldow(User user) {
		
		if (user != null) {
			tf_imie.setText(user.getFirstName());
			tf_nazwisko.setText(user.getLastName());
			tf_email.setText(user.getEmail());
			tf_login.setText(user.getLogin());
			tf_haslo.setText(user.getPassword());
			cb_uprawnienia.setValue(user.getPermissions());
		} else {
			tf_imie.setText("");
			tf_nazwisko.setText("");
			tf_email.setText("");
			tf_login.setText("");
			tf_haslo.setText("");
			cb_uprawnienia.setValue("");
			System.out.println("test");
		}
	}

i jak teraz metodę selectedItems() zaaplikować do metody daneDoTextFieldow() ??

C1
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 7 lat
  • Postów:72
1

a jakbyś do obsługi przycisku edytuj dał takie coś?

Kopiuj
try {
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(getClass().getResource("/FXMLAddUser.fxml"));
            Parent root = loader.load();
            Stage dialogStage = new Stage();
            EditUserController controller = loader.getController();
            dialogStage.initModality(Modality.WINDOW_MODAL);
            User user=(User)tv_user.getSelectionModel().getSelectedItem();
            controller.daneDoTextFieldow(user);
            Scene scene = new Scene(root);
            dialogStage.setScene(scene);
            dialogStage.showAndWait();
        } catch (IOException ex) {
            Logger.getLogger(AdminProjectViewController.class.getName()).log(Level.SEVERE, null, ex);
        }
Z6
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 8 lat
  • Postów:233
0

user image

Dzięki wielkie :)

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)