gpt4 book ai didi

java - 如何使用 HashMap 或任何列表而不是以下格式的可观​​察列表填充 javafx TableView

转载 作者:行者123 更新时间:2023-12-04 05:27:43 25 4
gpt4 key购买 nike

我怎样才能使用 List , ArrayListHashMap在它使用 <Person> 的可观察列表中并且每次都有新的Person()表列的初始化和相同 PropertyValueFactory .

我怎样才能使用:

 private final ObservableList<Person> data =
FXCollections.observableArrayList( MyList/HashMap/ArrayList Here);

我很难弄清楚我在哪里犯了错误。

Oracle 文档举例 here
private TableView<Person> table = new TableView<Person>();
private final ObservableList<Person> data =
FXCollections.observableArrayList(
new Person("Jacob", "Smith", "jacob.smith@example.com"),
new Person("Isabella", "Johnson", "isabella.johnson@example.com"),
new Person("Ethan", "Williams", "ethan.williams@example.com"),
new Person("Emma", "Jones", "emma.jones@example.com"),
new Person("Michael", "Brown", "michael.brown@example.com"));


TableColumn emailCol = new TableColumn("Email");
emailCol.setMinWidth(200);
emailCol.setCellValueFactory(
new PropertyValueFactory<Person, String>("email"));

table.setItems(data);

这是我的代码:
      @FXML
private TableView<ObservableList> tableViewCOA = new TableView<ObservableList>();

@FXML
private TableColumn superTypeNameCol = new TableColumn();

@FXML
private TableColumn catagoryNameCol = new TableColumn();

@FXML
private TableColumn accountNameCol = new TableColumn();
@FXML
private TableColumn accountIDCol = new TableColumn();

final ObservableList<ObservableList> data = FXCollections.observableArrayList(

getAllCOA() //<-- myObservableListHere (refer to last method of jdbc)

);

superTypeNameCol.setCellValueFactory(
new PropertyValueFactory<COA,String>("superNameCol")
);

catagoryNameCol.setCellValueFactory(
new PropertyValueFactory<COA,String>("catagoryNameCol")
);
accountIDCol.setCellValueFactory(
new PropertyValueFactory<COA,String>("accountIDCol")
);
accountNameCol.setCellValueFactory(
new PropertyValueFactory<COA,String>("accountNameCol")
);

tableViewCOA.setItems(data);

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package accountsMain;

import javafx.beans.property.SimpleStringProperty;

/**
*
* @author u1
*/
public class COA{


private final SimpleStringProperty superNameCol;
private final SimpleStringProperty catagoryNameCol;
private final SimpleStringProperty accountNameCol;
private final SimpleStringProperty accountIDCol;


public COA(String superName,
String catagoryName,
String accountName,
String accountID

){


this.superNameCol = new SimpleStringProperty(superName);
this.catagoryNameCol = new SimpleStringProperty(catagoryName);
this.accountIDCol = new SimpleStringProperty(accountID);
this.accountNameCol = new SimpleStringProperty(accountName);

}

public String getSuperNameCol() {
return superNameCol.get();
}
public void setSuperNameCol(String superName) {
superNameCol.set(superName);
}

public String getCatagoryNameCol() {
return catagoryNameCol.get();
}
public void setCatagoryNameCol(String catagoryName) {
catagoryNameCol.set(catagoryName);
}

public String getAccountIDCol() {
return accountIDCol.get();
}
public void setAccountIDCol(String accountID) {
accountIDCol.set(accountID);
}

public String getAccountNameCol() {
return accountNameCol.get();
}
public void setAccountNameCol(String accountName) {
accountNameCol.set(accountName);
}
}

///////////////////////////// this is what returns -----myObservableList-------///////////////////////////////

public static ObservableList<ObservableList> getAllCOA() {

Connection con = null;

// HashMap rows = new HashMap();
ObservableList<ObservableList> rows = FXCollections.observableArrayList();

try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(
"jdbc:mysql://"+host+":3306/"+DBname, user, password);


PreparedStatement pStmt = con.prepareStatement(
"select "
+ "supercoa.superTypeName,"
+ "catagorycoa.catagoryName,"
+ "accountscoa.accountName,"
+ "accountscoa.account_id"
+ " FROM"
+ " supercoa,catagorycoa,accountscoa"
+ " WHERE"
+ " accountscoa.catagory_id = catagorycoa.catagory_id"
+ " group by accountscoa.accountName");

ResultSet rs = null;
rs = pStmt.executeQuery();
int i = 1;
while (rs.next()) {

// List singleRow = new ArrayList();
ObservableList<String> singleRow = FXCollections.observableArrayList();
String supertypeName = rs.getString("supertypeName"); singleRow.add(supertypeName);
String catagoryName = rs.getString("catagoryName"); singleRow.add(catagoryName);
String accountName = rs.getString("accountName"); singleRow.add(accountName);
String account_id = rs.getString("account_id"); singleRow.add(account_id);

//rows.put(i,singleRow);
//i++;
rows.add(singleRow);
}

pStmt.close();
con.close();

} catch (ClassNotFoundException | SQLException e) {
main.ErrorLogging.errorLog(e.toString());

}
return rows;
}

数据未出现,但表格显示为空白列

最佳答案

要从 HashMap 填充 TableView,请参阅 TableView 教程部分 Adding Maps of Data to the Table .

对于您在问题中提供的示例,最好更改 getAllCOA() 的签名。方法:

public static ObservableList<COA> getAllCOA()

此外,当您使用 getAllCOA()方法,而是有:
final ObservableList<COA> data = getAllCOA();

当您定义表格时,请改用:
private TableView<COA> tableViewCOA = new TableView<COA>();

通过这种方式,您将使用 COA 对象列表,而不仅仅是列表列表。这将允许您创建的单元格值工厂工作。您的单元格值工厂当前无法正常工作,因为它们是为了内省(introspection) COA 对象的属性而构建的,并且您没有将 COA 对象放置在表数据中。

关于java - 如何使用 HashMap 或任何列表而不是以下格式的可观​​察列表填充 javafx TableView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13006386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com