mysql - 如何在Tableview(Javafx)中仅显示mysql表的单列?

标签 mysql javafx tableview

嗨,我尝试过以下代码在javafx的tableview中仅显示mysql表的一列,但它不起作用。

TableView table = new TableView();
private static ObservableList<ObservableList> data = FXCollections.observableArrayList();

TableColumn firstNameCol = new TableColumn("Username");
table.getColumns().addAll(firstNameCol);
firstNameCol.prefWidthProperty().bind(table.widthProperty().divide(1));
firstNameCol.setCellValueFactory(new PropertyValueFactory("Username"));

Connection conn_mysql;
conn_mysql = DBConnector.connect();
String SQL = "SELECT Username_name from Accounts";
ResultSet rs = conn_mysql.createStatement().executeQuery(SQL);

while (rs.next()) { 
    ObservableList<String> row = FXCollections.observableArrayList();
    row.add(rs.getString("Username_name"));
    data.add(row);
}

table.setItems(data);

最佳答案

为什么你的代码不起作用

cellValueFactory是一个函数,它将表示每行的项目映射到应在该行和该列的单元格中显示的值。该函数表示为 Callback PropertyValueFactory 是一个方便的实现,相当于

cellData -> cellData.getValue().xxxProperty()

cellData -> new ReadOnlyObjectWrapper(cellData.getValue().getXxx())

哪里xxxPropertyValueFactory 中指定的名称和cellData CellDataFeatures .

<小时/>

改进您的代码(为了清楚地了解正在发生的情况并帮助修复它)

如果您不使用原始类型,您的代码将会大大改进。 IE。你应该这样做

TableView<ObservableList<String>> table = new TableView<>();
private static ObservableList<ObservableList<String>> data = FXCollections.observableArrayList();

TableColumn<ObservableList<String>, String> firstNameCol = new TableColumn<>("Username");

在这里,您实际上指定了 TableView 表示的类型。和TableColumn 。每行由 ObservableList<String> 表示列中每个单元格中的值由 String 表示.

现在应该清楚为什么您的代码不起作用了。 PropertyValueFactory实际上获取一行的值

ObservableList<String> row  = ... ;

并尝试调用其中一个

row.UsernameProperty()

row.getUsername()

获取列的值。这两种方法都不存在。

<小时/>

解决问题

所以你应该设置 cellValueFactory查找表示该行的列表的第一个元素的内容:

firstNameCol.setCellValueFactory(cellData -> {
    ObservableList<String> rowValue = cellData.getValue();
    String cellValue = rowValue.get(0);
    return new ReadOnlyStringWrapper(cellValue);
});

关于mysql - 如何在Tableview(Javafx)中仅显示mysql表的单列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32778097/

相关文章:

MySQL:如何计算一个对象的实例,然后显示该对象实例最多的那个?

php - 需要双击才能插入数据库

mysql - 如何使用 MySQL InnoDB 实现 auto_increment 复合主键?

sql - 简单的 SQL - 计数函数

css - 如何在JavaFX中实现边框的软圆效果

JavaFX 仅使用 CSS 控制笔画样式?

swift - 如何在单元格快速删除后删除多余的空间

java - 我尝试在Intellij中使用gluon运行新项目时出错

ios - 从 TableView Objective C 获取 IndexPath.Row

ios - 将值从 UITableViewCell 传递到详细信息 View