2013-07-01 8 views
1

Je suis un débutant en JavaFX et aussi en Java. Les gars pouvez-vous s'il vous plaît comprendre ce code si ce qui manque parce que je peux déjà imprimer les éléments de la base de données en utilisant la fonction println.Remplissage TableView en JavaFX avec TableView créé en FXML Fichier

public class TableViewController implements Initializable{ 

@FXML 
private TableView<studentInfo> tblViewer = new TableView<studentInfo>(); 
@FXML 
private TableColumn colID = new TableColumn(); 
@FXML 
private TableColumn colName = new TableColumn(); 
@FXML 
private TableColumn colAddress = new TableColumn(); 
@FXML 
private TableColumn colAge = new TableColumn(); 
@FXML 
private TableColumn colContact = new TableColumn(); 
@FXML 
private Button cmdTest; 

@Override 
public void initialize(URL url, ResourceBundle rb) { 
// TODO 
System.out.println("READ"); 
System.out.println(this.getClass().getSimpleName() + ".initialize"); 
cmdTest.setOnAction(new EventHandler<ActionEvent>() {    
    @Override 
    public void handle(ActionEvent event) { 
    System.out.println("Button Pressed");     
    colID.setCellValueFactory(new PropertyValueFactory<studentInfo, Integer>("id")); 
    colName.setCellValueFactory(new PropertyValueFactory<studentInfo, String>("name")); 
    colAddress.setCellValueFactory(new PropertyValueFactory<studentInfo, String>("address")); 
    colAge.setCellValueFactory(new PropertyValueFactory<studentInfo, Integer>("age")); 
    colContact.setCellValueFactory(new PropertyValueFactory<studentInfo, String>("contact_num")); 
    tblViewer.getItems().setAll(getAllstudentInfo()); 
    //tblViewer.getColumns().addAll(colID, colName, colAddress, colAge, colContact); 
    //System.out.println(tblViewer.getItems().setAll(getAllstudentInfo())); 
    } 
});  
} 

public class studentInfo{ 

private final SimpleIntegerProperty idCol; 
private final SimpleStringProperty nameCol; 
private final SimpleStringProperty addressCol; 
private final SimpleIntegerProperty ageCol; 
private final SimpleStringProperty contact_numCol; 

public studentInfo(Integer id, String name, String address, Integer age, String contact_num){ 
    this.idCol = new SimpleIntegerProperty(id); 
    this.nameCol = new SimpleStringProperty(name); 
    this.addressCol = new SimpleStringProperty(address); 
    this.ageCol = new SimpleIntegerProperty(age); 
    this.contact_numCol = new SimpleStringProperty(contact_num); 
    } 
    public Integer getidCol(){ 
     return idCol.get(); 
    } 
    public void setidCol(Integer id){ 
     idCol.set(id);  
    } 
    public String getnameCol(){ 
     return nameCol.get(); 
    } 
    public void setnameCol(String name){ 
     nameCol.set(name); 
    } 
    public String getaddressCol(){ 
     return addressCol.get(); 
    } 
    public void setaddressCol(String address){ 
     addressCol.set(address); 
    } 
    public Integer getageCol(){ 
     return ageCol.get(); 
    } 
    public void setageCol(Integer age){ 
     ageCol.set(age); 
    } 
    public String getcontact_numCol(){ 
     return contact_numCol.get(); 
    } 
    public void setcontact_numCol(String contact_num){ 
     contact_numCol.set(contact_num); 
    }   
    } 


public List<studentInfo> getAllstudentInfo(){ 
Connection conn; 
List ll = new LinkedList(); 
Statement st; 
ResultSet rs; 
String url = "jdbc:mysql://localhost/java_test"; 
String user = "root"; 
String pass = ""; 
String driver = "com.mysql.jdbc.Driver"; 

try{ 
    Class.forName(driver); 
    conn = DriverManager.getConnection(url, user, pass); 
    st = conn.createStatement(); 
    String recordQuery = ("Select * from student");    
    rs = st.executeQuery(recordQuery); 
    while(rs.next()){  
     Integer id = rs.getInt("id"); 
     String name = rs.getString("name"); 
     String address = rs.getString("address"); 
     Integer age = rs.getInt("age"); 
     String contact_num = rs.getString("contact_num"); 
     ll.add(new studentInfo(id, name, address, age, contact_num)); 
     System.out.println(id +","+ name +","+ address +","+ age +","+ contact_num +" "+"added."); 
    }    
}catch(ClassNotFoundException | SQLException ex){ 
    Logger.getLogger(TableViewController.class.getName()).log(Level.SEVERE, null, ex); 
} 
return ll; 
} 

Et voici le fichier FXML:

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

<AnchorPane id="AnchorPane" prefHeight="594.0" prefWidth="838.0" xmlns:fx="http://javafx.com/fxml" fx:controller="loadingcsvtotableview.TableViewController"> 
<children> 
<TableView fx:id="tblViewer" prefHeight="521.0" prefWidth="808.0" AnchorPane.bottomAnchor="14.0" AnchorPane.leftAnchor="15.0" AnchorPane.rightAnchor="15.0" AnchorPane.topAnchor="59.0"> 
    <columns> 
    <TableColumn prefWidth="75.0" text="ID" fx:id="colID" /> 
    <TableColumn prefWidth="175.0" text="Name" fx:id="colName" /> 
    <TableColumn prefWidth="330.0" text="Address" fx:id="colAddress" /> 
    <TableColumn prefWidth="75.0" text="Age" fx:id="colAge" /> 
    <TableColumn prefWidth="150.0" text="Contact Number" fx:id="colContact" /> 
    </columns> 
</TableView> 
<Button fx:id="cmdExport" layoutX="14.0" mnemonicParsing="false" prefHeight="30.0" prefWidth="112.0" text="Export Data" AnchorPane.topAnchor="21.0" /> 
<Button fx:id="cmdClose" layoutX="144.0" mnemonicParsing="false" prefHeight="30.0" prefWidth="112.0" text="Close" AnchorPane.topAnchor="21.0" /> 
<Button id="cmdClose" fx:id="cmdTest" layoutX="386.0" layoutY="21.0" mnemonicParsing="false" prefHeight="30.0" prefWidth="112.0" text="Test" /> 
</children> 
</AnchorPane> 

Qu'est-ce que suis-je Manquant? S'il vous plaît aidez-moi les gars ..

Répondre

0

Commencez par ne pas faire de nouvelle instance sur votre importation FXML. Juste

@FXML 
private TableColumn<String> colContact; 
2

La propriété Valeur usine ne correspond pas à une fonction accesseurs dans votre haricot. Donc, si vous définissez l'usine de valeur de la cellule comme la prochaine:

colID.setCellValueFactory(new PropertyValueFactory<studentInfo, Integer>("id")); 

L'usine de valeur de la propriété recherchera la fonction getId(), setId() et idProperty(). Le dernier renvoie la propriété elle-même, que vous avez dans votre haricot. Vérifiez le API of PropertyValueFactory et le tutorial of Table View pour approfondir ce sujet.

Faites aussi ce que dit agonist_, vous créez une colonne deux fois.

Il y a plusieurs choses. Vous définissez CellValueFactory chaque fois que vous cliquez sur le bouton. Vous devez le mettre dans l'événement initialiser pas dans le bouton.

Et la fonction getAllstudentInfo() bloquera votre interface graphique, car la requête est bloquée. Vous devriez le faire dans un fil de fond.

remplacer Ainsi, votre tblViewer.getItems().setAll(getAllstudentInfo()); à quelque chose comme:

Service<ObservableList<studentInfo>> service = new Service<ObservableList<studentInfo>>() {     
@Override 
protected Task<ObservableList<studentInfo>> createTask() { 
    return new Task<ObservableList<studentInfo>>() {        
     @Override 
     protected ObservableList<studentInfo> call() throws Exception { 
      return FXCollections.observableArrayList(getAllstudentInfo()); 
     } 
    }; 
} 
}; 
tblViewer.itemsProperty().bind(service.valueProperty());   
service.start(); 

Jetez un coup d'oeil sur concurrency tutorial of JavaFX 2 sûr vous aider.

Espérons que ça aide.

+0

merci Antonio J. – user2282225

+0

Cette réponse précise et directe a éclairci ma confusion. Merci @Antonio J. – Chiranjib

Questions connexes