我正在用JAVAFX做一个项目,用数据库中的值填充listviiew。我正在使用如下的Scenebuilder,
MainWindowController.java
public class MainWindowController implements Initializable {
@FXML private RadioButton connRadioBtn;
@FXML private ListView<MainWindowController> poListView;
public void initialize(URL url, ResourceBundle rb){
}
public List<MainWindowController> getPurchaseOrder() throws SQLException{
DBConnection sqlCheckConn = DBConnection.getInstance();
Statement stmt = DBConnection.getStatement();
String listSql = "SELECT DISTINCT VSI.PO_NO PO_NO FROM VW_SUPP_INVOICE VSI";
ResultSet rs = stmt.executeQuery(listSql);
List<MainWindowController> list = new ArrayList<>();
while (rs.next()) {
String s1 = rs.getString("PO_NO");
list.add(new MainWindowController(s1));
}
return list;
}
}
我得到以下错误,
Error:(48, 22) java: constructor MainWindowController in class weltes.finance.controller.MainWindowController cannot be applied to given types;
required: no arguments
found: java.lang.String
reason: actual and formal argument lists differ in length
请帮助我,我做错了什么?并原谅我刚刚开始学习java
答案 0 :(得分:0)
您收到错误,因为MainWindowController
类不提供默认构造函数以外的构造函数,但您在new MainWindowController(s1)
循环中调用while
。
您尝试使用控制器类的实例填充ListView
,这对我来说没有意义。 (我知道几个场景,将控制器类的实例添加为ListView
的项是有意义的,但它们都不类似于您的代码。)您应该使用您想要显示的数据类型作为类型参数ListView
:
@FXML private ListView<String> poListView;
...
List<String> list = new ArrayList<>();
while (rs.next()) {
String s1 = rs.getString("PO_NO");
list.add(s1);
}
您还可以使用自定义类并使用https://www.google.com/settings/security/lesssecureapps自定义ListCell
中显示的ListView
,但如果只显示String
,则默认<{1}}和cellFactory
就足够了。