2016-11-12 23 views
0

私はテーブルビューにリストを表示する方法を永遠に試してきました。それは出力は私のリストですが素晴らしいですが、私はシーンビルダーを通して作ったテーブルで見ることができます。テーブルは同じfx:idを持つので、そうではありません。データは正常に表示されていますが、コンパイル中ですがテーブルにはまだデータがありません。JavaFXシーンビルダーテーブルが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); 

    } 

} 

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

値? – fabian

+0

私は値を取得し、それらを転送しようとするために、事前に埋め込まれたjavaDBを使用しています。私は答えを見つけ出し、CellValueFactory cellData.getValueを使用して、そのDBからTableView Columnにプルしました。 –

答えて

0

は、私はいくつかのことを変更することで、接続を固定し、それは私が(http://code.makery.ch/library/javafx-8-tutorial/part2/

をこれらの変更を行うと、私の答えを見つける助けたリンクに対してあなたINFOSYSありがとうFXMLファイルを作成し、コードにいくつかの新しい行を追加しました。私はこれを明確にするためにコメントしました。私はまた、私が気づいていないオブジェクトのクラスが必要でした、そして今、私が作成したDBから完全に読み込み中です。ここで

は変更コードである:ここで

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> 

データベースの意味を理解するための新しいクラスを使用すると、カラムを使用しないとどのようにあなたが街の名前を所定の集団へのアクセスを得るのですかどう `cellValueFactory`の

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; 
} 
} 
関連する問題