输出到 TableView

Output to the TableView

需要从tableView中的MySQL得出结论。创建实体:

@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
//
@Entity
@Table(name = "users2")  //создание бд и таблицы юзеров
public class User
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(nullable = false, unique = true)
    private String login;
    
    @Column(nullable = false, length = 16)
    private String password;
    
    @Column(nullable = false, length = 50)
    private String surname;
    
    @Column(nullable = false, length = 50)
    private String name;
//equals, hashcode, toString
}

基于实体,我做了一个控制器:

public class Controller implements Initializable
{
    private Stage stage;
    
    public void setStage(Stage stage)
    {
        this.stage = stage;
    }
    
    ObservableList<User> usersData = FXCollections.observableArrayList();
    
    @Autowired
    private UserRepository userRepository;
    
    @FXML
    private TableView<User> tableUsers;
    
    @FXML
    private TableColumn<User, Long> userIdColumn;
    
    @FXML
    private TableColumn<User, String> userLoginColumn;
    
    @FXML
    private TableColumn<User, String> userPassColumn;
    
    @FXML
    private TableColumn<User, String> userSurnameColumn;
    
    @FXML
    private TableColumn<User, String> userNameColumn;
    
    @Override
    public void initialize(URL location, ResourceBundle resources)
    {
        //id, login, password, surname, name
        userIdColumn.setCellValueFactory(new PropertyValueFactory<>("id"));
        userLoginColumn.setCellValueFactory(new PropertyValueFactory<>("login"));
        userPassColumn.setCellValueFactory(new PropertyValueFactory<>("password"));
        userSurnameColumn.setCellValueFactory(new PropertyValueFactory<>("surname"));
        userNameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
    }
    
    @FXML
    private void displayData() throws IOException
    {
        fillTable();
    }
    
    private void fillTable()
    {
        for (User usersDatum : userRepository.findAll())
        {
            usersData.add(new User(
                    usersDatum.getId(),
                    usersDatum.getLogin(),
                    usersDatum.getPassword(),
                    usersDatum.getSurname(),
                    usersDatum.getName()));
        }
        tableUsers.setItems(usersData);
    }
}

然后我做了一个存储库和一个数据库查询,并试图将它输出到控制台。发生了!

@Repository
public interface UserRepository extends JpaRepository<User, Long>
{
    @Query(value = "select * from users2", nativeQuery = true)
    List<User> findAll();
}
<Button mnemonicParsing="false" prefHeight="30.0" prefWidth="75.0"  text="Load" onAction="#displayData">

我们正在使用 Spring 连接到数据库。能不能告诉我在这种情况下,当你点击按钮时,如何显示tableview中的所有数据?

@Edit2(清理和简化)

注入 UserRepository

@Autowired
private UserRepository userRepository;

创建一个方法 fillTable() 如下所示:

private void fillTable() throws IOException {
        userIdColumn.setCellValueFactory(new PropertyValueFactory<>("id"));
        userLoginColumn.setCellValueFactory(new PropertyValueFactory<>("login"));
        userPassColumn.setCellValueFactory(new PropertyValueFactory<>("password"));
        userSurnameColumn.setCellValueFactory(new PropertyValueFactory<>("surname"));
        userNameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));

        for (User usersDatum : userRepository.findAll()){
                    usersData.add(new User(
                            usersDatum.getId(),
                            usersDatum.getLogin(),
                            usersDatum.getPassword(),
                            usersDatum.getSurname(),
                            usersDatum.getName()));
         }
        tableUsers.setItems(usersData);
    }

这样使用initialize()

@Override
public void initialize(URL location, ResourceBundle resources){
     fillTable(); 
}
    

Link 使用您在 fxml 文件上的按钮的方法,即:

<Button mnemonicParsing="false" onAction="#fillTable" text="Fill Table"/>