JavaFX从Oracle数据库值填充ListView <e>

时间:2015-12-22 02:41:14

标签: java sql oracle javafx

我正在用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

1 个答案:

答案 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就足够了。