在JavaFX中创建动态TableView可以通过以下步骤实现:
下面是一个示例代码,演示如何从用户选择的数据库表创建动态TableView:
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.sql.*;
public class DynamicTableViewExample extends Application {
private static final String DB_URL = "jdbc:mysql://localhost:3306/mydatabase";
private static final String DB_USERNAME = "username";
private static final String DB_PASSWORD = "password";
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
TableView<Object> tableView = new TableView<>();
ObservableList<Object> data = FXCollections.observableArrayList();
try (Connection connection = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD)) {
String tableName = "user_table"; // 用户选择的表名
// 查询表的元数据信息
DatabaseMetaData metaData = connection.getMetaData();
ResultSet resultSet = metaData.getColumns(null, null, tableName, null);
// 创建表的列
while (resultSet.next()) {
String columnName = resultSet.getString("COLUMN_NAME");
TableColumn<Object, Object> column = new TableColumn<>(columnName);
column.setCellValueFactory(new PropertyValueFactory<>(columnName));
tableView.getColumns().add(column);
}
// 查询表的数据
Statement statement = connection.createStatement();
resultSet = statement.executeQuery("SELECT * FROM " + tableName);
// 将数据添加到ObservableList中
while (resultSet.next()) {
// 根据表的列数创建一个JavaBean对象
Object rowData = new Object();
for (int i = 1; i <= tableView.getColumns().size(); i++) {
String columnName = tableView.getColumns().get(i - 1).getText();
Object value = resultSet.getObject(i);
// 使用反射将数据设置到JavaBean对象中
// ...
// 示例代码中使用Object作为JavaBean对象,实际应根据表的数据类型创建具体的JavaBean类
}
data.add(rowData);
}
tableView.setItems(data);
} catch (SQLException e) {
e.printStackTrace();
}
VBox root = new VBox(tableView);
Scene scene = new Scene(root, 800, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
}
这个示例代码假设使用MySQL数据库,并且数据库中已经存在名为"mydatabase"的数据库。请根据实际情况修改DB_URL、DB_USERNAME和DB_PASSWORD的值。
在这个示例中,用户选择的表名为"user_table",你可以根据实际需求修改为用户选择的表名。
对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,所以无法提供相关链接。但你可以根据自己的需求和实际情况,在腾讯云官方网站上查找相关产品和文档。
领取专属 10元无门槛券
手把手带您无忧上云