2016-11-12 47 views
0

我一直在努力想弄清楚如何使列表顯示在我的表視圖。因爲它的輸出是我的列表,但是我可以在我通過場景製作器製作的表格中看到它。該表具有相同的fx:id,所以不是這樣。數據顯示正常並且正在編譯,但仍然沒有數據。JavaFX場景生成器表不會填滿使用Java數據庫

public class FXMLDocument_PopulationDatabase_AllieBeckmanController implements Initializable { 

@FXML 
private ChoiceBox GetBox; 
@FXML 
private ChoiceBox SortBox; 
@FXML 
private TableView CityTable; 

@FXML 
private TableColumn COne; 
@FXML 
private TableColumn CTwo; 

private final ObservableList dta = FXCollections.observableArrayList(); 

@Override 
public void initialize(URL url, ResourceBundle rb) { 


    // TODO 
    try{ 
     // call the driver used to connect to the database 
     Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance(); 

     // connect to the city data base 
     Connection c = DriverManager.getConnection("jdbc:derby://localhost:1527/CityDB;create=true", "AllieBeckman", "1122"); 

     // create a statement used to sort through the data in the database 
     Statement stmt = c.createStatement(); 

     // create a result that will be used to get the data and translate it into variables 
     ResultSet result = stmt.executeQuery("SELECT * FROM city"); 

     // get number of columns 
     ResultSetMetaData rsmd = result.getMetaData(); 

     // continue sorting through and translating data until there are no more rows of data 
     while (result.next()){ 
      // the 25 and 10 stand for two columns each is translated int its respective data type using 
      // the result set 
      System.out.println(result.getString("cityname") + result.getDouble("population")); 

      // adds one column 
      dta.add(result.getString("cityname")); 

     } 

     System.out.println(dta); 

     CityTable.setItems(dta); 
     // close the connection 
     c.close(); 
    }catch(Exception e){ 
     System.out.println("Failed"); 
     System.out.println(e); 

    } 

} 

OUTPUT:

Executing C:\Users\Allie\Documents\NetBeansProjects\PopulationDatabase_AllieBeckman\dist\run1111906738\PopulationDatabase_AllieBeckman.jar using platform C:\Users\Allie\Desktop\Programs_and_Components\jdk1.8.0_101\jre/bin/java 
New York           8.5505405E7 
Los Angeles          3971883.0 
Chicago           2720546.0 
Huston           2296224.0 
Philladelphia          1567442.0 
Phoenix           1563025.0 
San Antonio          1469845.0 
San Diego           1394928.0 
Dallas           1300092.0 
San Jose           1026908.0 
Austin           931830.0 
Jacksonville          868031.0 
San Francisco          864816.0 
Indianapolis          853173.0 
Columbus           850106.0 
Fort Worth          833319.0 
Charlotte           827097.0 
Seattle           684451.0 
Denver           682545.0 
El Paso           681124.0 
[New York           , Los Angeles          , Chicago           , Huston           , Philladelphia          , Phoenix           , San Antonio          , San Diego           , Dallas           , San Jose           , Austin           , Jacksonville          , San Francisco          , Indianapolis          , Columbus           , Fort Worth          , Charlotte           , Seattle           , Denver           , El Paso           ] 
Deleting directory C:\Users\Allie\Documents\NetBeansProjects\PopulationDatabase_AllieBeckman\dist\run1111906738 
+0

什麼'cellValueFactory' s是否與列使用,你如何可以訪問給定城市的名字人口? – fabian

+0

我正在使用預填充javaDB來獲取值,只是試圖轉移它們。我找到了答案,並開始使用CellValueFactory cellData.getValue從該數據庫拉到TableView列謝謝:) –

回答

0

謝謝INFOSYS的鏈接它幫助我做出這些更改後,發現我的答案(http://code.makery.ch/library/javafx-8-tutorial/part2/

我固定在不斷變化的幾件事情的連接FXML文件,並在代碼中添加了一些新的代碼,這些代碼是爲了清晰起見而提出的。我還需要一個我沒有意識到的對象的類,現在它正在從我創建的數據庫中完美地讀取。

這裏是變化碼:

public class FXMLDocument_PopulationDatabase_AllieBeckmanController implements Initializable { 

// connect the TableView from the xml file 
@FXML 
private TableView<City> CityTable; 

// connect the table columns from the xml file 
@FXML 
private TableColumn<City, String> CityName; 
@FXML 
private TableColumn<City, String> Population; 

// create an observable list to fill with data from DB and populate TableView 
private final ObservableList<City> dta = FXCollections.observableArrayList(); 

@Override 
public void initialize(URL url, ResourceBundle rb) { 
    try{ 
     // call the driver used to connect to the database 
     Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance(); 

     // connect to the city data base 
     Connection c = DriverManager.getConnection("jdbc:derby://localhost:1527/CityDB;create=true", "AllieBeckman", "1122"); 

     // create a statement used to sort through the data in the database 
     Statement stmt = c.createStatement(); 

     // create a result that will be used to get the data and translate it into variables 
     ResultSet result = stmt.executeQuery("SELECT * FROM city"); 

     // continue sorting through and translating data until there are no more rows of data 
     while (result.next()){ 

      // print each line of data to check if it's right 
      System.out.println(result.getString("cityname") + result.getDouble("population")); 

      // make a new city object with each row in the database CityDB 
      City cty = new City(result.getString("cityname"), "" + result.getDouble("population")); 

      // add the new city object to the observable list 
      dta.add(cty); 
     } 

     // print the observable list to make sure it's full 
     System.out.println(dta); 

     // assign the columns in your tableview to the proper data in the city object 
     CityName.setCellValueFactory(cellData -> cellData.getValue().cityname); 
     Population.setCellValueFactory(cellData -> cellData.getValue().population); 

     // populate the tableview with the observable list 
     CityTable.setItems(dta); 

     // close the connection 
     c.close(); 

    }catch(Exception e){ 
     System.out.println("Failed"); 
     System.out.println(e); 
    } 
} 
} 

這是必要的FXML代碼連接它,我是最缺少的。

// I was forgetting to add the fx:id here (citytable) 
<TableView fx:id="CityTable" layoutX="39.0" layoutY="64.0" prefHeight="200.0 prefWidth="200.0"> 
    <columns> 
// I was forgetting to add the fx:id here for the columns 
    <TableColumn prefWidth="75.0" text="City" fx:id="CityName" /> 
    <TableColumn prefWidth="75.0" text="Population" fx:id="Population" /> 
    </columns> 
    <items> 
    <FXCollections fx:factory="observableArrayList" /> 
    </items> 
</TableView> 

新的類,使數據庫的感測值

import javafx.beans.property.SimpleStringProperty; 
import javafx.beans.property.StringProperty; 

/** 
* Model class for a City. 
*/ 
public class City { 

public final SimpleStringProperty cityname; 
public final SimpleStringProperty population; 

/** 
* Default constructor. 
*/ 
public City() { 
    this(null, null); 
} 

/** 
* Constructor with some initial data. 
* 
* @param cityname 
* @param population 
*/ 
public City(String cityname, String population) { 
    this.cityname = new SimpleStringProperty(cityname); 
    this.population = new SimpleStringProperty(population); 
} 

public String getCityName() { 
    return cityname.get(); 
} 

public void setCityName(String cityname) { 
    this.cityname.set(cityname); 
} 

public StringProperty cityNameProperty() { 
    return cityname; 
} 

public String getPopulation() { 
    return population.get(); 
} 

public void setPopulation(String population) { 
    this.population.set(population); 
} 

public StringProperty populationProperty() { 
    return population; 
} 
}