У меня есть таблица, следующая за формой в JavaFX с использованием FXML. Не могли бы вы рассказать мне, как получать и загружать данные в форму, когда я нажимаю на следующую таблицу?Как получить данные при нажатии на TableView java FXML
Вот мой контроллер
package com.songhuy.gui.controller;
import com.songhuy.dal.UserDAL;
import com.songhuy.dll.RoleDLL;
import com.songhuy.dll.UserDLL;
import com.songhuy.entity.User;
import com.songhuy.list.RoleList;
import com.songhuy.list.UserList;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;
import javafx.util.StringConverter;
/**
* FXML Controller class
*
* @author DUONGPHAM
*/
public class UserController implements Initializable {
/**
* Initializes the controller class.
*/
//Khai báo các thành phần FXML
@FXML
TableView<UserList> tableUser;
@FXML
TextField txtUsername;
@FXML
TextField txtFullname;
@FXML
TableColumn<UserList, String> colUsername;
@FXML
TableColumn<UserList, String> colFullname;
@FXML
TableColumn<UserList, String> colBirthday;
@FXML
TableColumn<UserList, String> colAddress;
@FXML
TableColumn<UserList, String> colPhonenumber;
@FXML
TableColumn<UserList, String> colEmail;
@FXML
TableColumn<UserList, String> colRole;
@FXML
ComboBox cbxRole;
User usr = new User();
UserDLL dll = new UserDLL();
UserDAL dal = new UserDAL();
//Các hàm chạy khi User được load
@Override
public void initialize(URL url, ResourceBundle rb) {
tableUser();
cbxRole();
}
//Load form User được gọi từ Main
public void User() {
try {
Parent root;
root = FXMLLoader.load(getClass().getResource("/com/songhuy/gui/fxml/User.fxml"));
Stage primaryStage = new Stage();
Scene scene = new Scene(root, 800, 600);
//scene.getStylesheets().add("/fxml/styles/main.css");
primaryStage.setScene(scene);
primaryStage.setTitle("USER");
primaryStage.show();
} catch (IOException ex) {
System.out.println("Error \n" + ex);
}
}
//xóa field
public void clearTextbox() {
txtUsername.clear();
txtFullname.clear();
}
//Load combobox Role
public void cbxRole() {
//load combobox
RoleDLL role = new RoleDLL();
cbxRole.setConverter(new StringConverter<RoleList>() {
@Override
public String toString(RoleList object) {
return object.getRole();
}
@Override
public RoleList fromString(String string) {
return null;
}
});
ObservableList<RoleList> datarole = role.getAll();
cbxRole.setItems(datarole);
}
//Load table
public void tableUser() {
//load table
UserDLL dll = new UserDLL();
tableUser.setItems(dll.getAllUser());
colUsername.setCellValueFactory(new PropertyValueFactory<>("username"));
colFullname.setCellValueFactory(new PropertyValueFactory<>("fullname"));
colBirthday.setCellValueFactory(new PropertyValueFactory<>("birthday"));
colAddress.setCellValueFactory(new PropertyValueFactory<>("address"));
colPhonenumber.setCellValueFactory(new PropertyValueFactory<>("phonenumber"));
colEmail.setCellValueFactory(new PropertyValueFactory<>("email"));
colRole.setCellValueFactory(new PropertyValueFactory<>("role"));
}
//Set giá trị field theo click
public void setselectView() {
UserList userlist = tableUser.getSelectionModel().getSelectedItem();
if (userlist != null) {
usr.username = userlist.getUsername();
dal.getUserId(usr);
txtUsername.setText(usr.username);
txtFullname.setText(usr.fullname);
}
}
//Click vào table hiện thông tin lên textbox
public void tableUserOnClick(ActionEvent evt) {
setselectView();
}
//Nút ADD
public void Add() {
}
}
Наличие класса 'User' и' public 'void User()' является нездоровой комбинацией. Я рекомендую следовать соглашениям об именах и начинать имена методов строчными буквами. – fabian
Кроме того, вы можете уточнить вопрос. Что именно вы хотите совершить, и какое событие пользователя вызвало его? Я не понимаю фразу «как получить и загрузить данные в форму, когда я нажимаю на следующую таблицу». –
Я имею в виду, когда я нажимаю на таблицу в форме пользователя, данные в таблице автоматически загружаются на textField по форме для редактирования, сохранения или удаления. –