2016-09-01 2 views
0

У меня есть таблица, следующая за формой в 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() { 

    } 

} 
+1

Наличие класса 'User' и' public 'void User()' является нездоровой комбинацией. Я рекомендую следовать соглашениям об именах и начинать имена методов строчными буквами. – fabian

+0

Кроме того, вы можете уточнить вопрос. Что именно вы хотите совершить, и какое событие пользователя вызвало его? Я не понимаю фразу «как получить и загрузить данные в форму, когда я нажимаю на следующую таблицу». –

+0

Я имею в виду, когда я нажимаю на таблицу в форме пользователя, данные в таблице автоматически загружаются на textField по форме для редактирования, сохранения или удаления. –

ответ

0

Я думаю, что я знаю, что это проблема. Обычно вы можете добавлять события в FXML. Если вы хотите, чтобы нажать на него, вы должны добавить его с тегом onMouseClicked="" Вот пример: <TableView fx:id="pl2" onMouseClicked="#handleClickTableView" GridPane.rowIndex="1"> Чтобы получить значение вашего TableView вы можете добавить что-то подобное, как это:

@FXML 
private void handleClickTableView(MouseEvent click) { 
     UserList userlist = tableUser.getSelectionModel().getSelectedItem(); 
     if (userlist != null) { 
      usr.username = userlist.getUsername(); 
      dal.getUserId(usr); 
      txtUsername.setText(usr.username); 
      txtFullname.setText(usr.fullname); 
    } 
} 

Если мышь щелкнув по представлению таблицы, он будет выполнять то, что вы определяете в методе. Надеюсь, это поможет. Cheers