2015-12-22 3 views
0

Я делаю проект с JAVAFX, чтобы заполнить listviiew со значениями из базы данных. я делаю это с Scenebuilder следующим образом,JavaFX Population ListView <E> from Oracle Database value

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

Вы получаете сообщение об ошибке, так как ваш MainWindowController класса не предусмотрено иное, чем конструктор по умолчанию конструктора, но вы называете new MainWindowController(s1) в while -loop.

Вы пытаетесь заполнить свой 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); 
} 

Вы также можете использовать свой собственный класс и настроить ListCell сек, отображенные в ListView используя cellFactory, но если должны отображаться только String s, по умолчанию cellFactory и ListView<String> должно хватить.