有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java输出到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中显示所有数据吗


共 (1) 个答案

  1. # 1 楼答案

    @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(); 
    }
        
    

    将该方法与fxml文件上的按钮链接,即:

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