2016-11-12 3 views
0

J'ai essayé pour toujours de comprendre comment faire apparaître la liste sur ma vue de table. comme c'est la sortie c'est ma liste qui est super mais je peux le voir dans le tableau que j'ai fait à travers le constructeur de scène. La table a le même fx: id donc ce n'est pas ça. Les données s'affichent correctement et il est en cours de compilation mais toujours pas de données sur la table.JavaFX Scène de construction de table ne pas remplir en utilisant Java DB

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); 

    } 

} 

SORTIE:

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

Que 's cellValueFactory' utilisez-vous avec les colonnes et comment vous avez accès à la population étant donné le nom de la ville? – fabian

+0

J'utilise un javaDB pré-rempli pour obtenir les valeurs et juste essayer de les transférer. J'ai trouvé la réponse et j'ai commencé à utiliser la cellule CellValueFactory cellData.getValue pour tirer de cette base de données vers la colonne TableView merci :) –

Répondre

0

Merci INFOSYS pour le lien, il m'a aidé à faire ces changements et de trouver ma réponse (http://code.makery.ch/library/javafx-8-tutorial/part2/)

Je fixe la connexion en changeant quelques petites choses dans le Fichier FXML et ajouté quelques nouvelles lignes au code que j'ai commenté pour plus de clarté. J'avais aussi besoin d'un cours pour l'objet que je n'avais pas réalisé et maintenant il fonctionne parfaitement à partir de la DB que j'ai créée.

Voici le code de changement:

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); 
    } 
} 
} 

Voici le code FXML nécessaire pour le connecter que je manque la plupart d'entre.

// 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> 

La nouvelle classe pour donner un sens de la base de données des valeurs

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; 
} 
}