tableview没有显示数据库中的数据

时间:2015-03-28 19:42:35

标签: java sql database javafx tableview

我无法填充我的tableview。我认为问题出在控制器中,就像我的数据被发送到FXML文件一样,因为系统输出(见下文)显示了我在数据库中的确切内容。

请让我知道我在哪里犯了错误。我浏览了那些存在的所有教程,但没有什么适合我的问题。

由于

主要应用程序:

package tableview;


import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class MainApp extends Application {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("view/FXMLTable.fxml"));
    Scene scene = new Scene(root);
    primaryStage.setScene(scene);
    primaryStage.show();    
}
}

控制器:

import tableview.model.Person;


public class FXMLTableController{

@FXML
public TableView<Person> tableview ;
@FXML
private TableColumn<Person, Number> clientIdColumn;
@FXML
private TableColumn<Person, String> firstNameColumn;
@FXML
private TableColumn<Person, String> lastNameColumn;

@FXML   
private void initialize() {
         assert tableview != null : "fx:id=\"tableview\" was not injected: check your FXML file 'UserMaster.fxml'.";
         clientIdColumn.setCellValueFactory(cellData -> cellData.getValue().
                 clientIDProperty());

        firstNameColumn.setCellValueFactory(cellData -> cellData.getValue()
                .firstNameProperty());              
        lastNameColumn.setCellValueFactory(cellData -> cellData.getValue()
                .lastNameProperty());

         buildData();

    }

private ObservableList<Person> data;


public  void buildData(){        
    data = FXCollections.observableArrayList();
    Connection con = null;


        try {
            Class.forName("org.sqlite.JDBC");
            con = DriverManager.getConnection("jdbc:sqlite:tableviewdb.db");

        String SQL = "Select * from INFO";            
        ResultSet rs = con.createStatement().executeQuery(SQL);  
        while(rs.next()){
            Person per = new Person();
            per.ClientID.set(rs.getInt("CLIENTID"));
            per.FirstName.set(rs.getString("FIRSTNAME"));
            per.LastName.set(rs.getString("LASTNAME"));

            data.add(per);  

        }
        tableview = new TableView<Person>();
        tableview.setItems(data);
        System.out.println(tableview.getItems().get(1).ClientID);
    }
    catch(Exception e){
          e.printStackTrace();
          System.out.println("Error on Building Data");            
    }
   }
}

模特课程:

package tableview.model;

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

public class Person {
    public SimpleIntegerProperty ClientID = new SimpleIntegerProperty();
    public SimpleStringProperty FirstName = new SimpleStringProperty();
    public SimpleStringProperty LastName = new SimpleStringProperty();

    public SimpleIntegerProperty getClientID() {
        return ClientID;
    }
    public SimpleStringProperty getFirstname() {
        return FirstName;
    }
    public SimpleStringProperty getLastName() {
        return LastName;
    }
    public IntegerProperty clientIDProperty(){
        return ClientID;
    }
    public StringProperty firstNameProperty(){
        return FirstName;

    }
    public StringProperty lastNameProperty(){
        return LastName;    
    }
}

FXML文件: (暂时忽略保存按钮......)     

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>


<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
   <children>
      <SplitPane prefHeight="400.0" prefWidth="600.0">
         <items>
            <SplitPane dividerPositions="0.5" orientation="VERTICAL" prefHeight="200.0" prefWidth="160.0">
              <items>
                <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
                     <children>
                        <TextField layoutX="93.0" layoutY="34.0" />
                        <TextField layoutX="93.0" layoutY="85.0" />
                        <Label layoutX="35.0" layoutY="39.0" text="name" />
                        <Label layoutX="35.0" layoutY="90.0" text="email" />
                        <Button layoutX="204.0" layoutY="140.0" mnemonicParsing="false" text="save" />
                     </children>
                  </AnchorPane>
                <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
                     <children>
                        <TableView layoutY="-2.0" prefHeight="200.0" prefWidth="598.0">
                          <columns>
                            <TableColumn prefWidth="302.0" text="name" />
                            <TableColumn prefWidth="295.0" text="email" />
                          </columns>
                        </TableView>
                     </children>
                  </AnchorPane>
              </items>
            </SplitPane>
         </items>
      </SplitPane>
   </children>
</AnchorPane>

1 个答案:

答案 0 :(得分:0)

您正在创建新的TableView并设置其项目,而不是设置FXML文件定义的表格中的项目。

删除
tableView = new TableView<Person>();

来自控制器。

要使用FXML文件中的相应元素填充控制器中的@FXML - 带注释的字段,您需要为这些元素添加fx:id属性:

<TableView fx:id="tableview" ... >
  <columns>
    <TableColumn fx:id="firstNameColumn" ... />
    ...