Comment peupler une vue de table qui est définie dans un fichier fxml qui est conçu dans JavaFx Scene Builder

j'aimerais savoir comment remplir une vue de table avec des données... Tous les exemples que j'ai vus créent une vue de table avec des colonnes et tout et l'ajoutent à la scène. Tout est fait dans le code java lui-même.

ce que je veux savoir: si je dessine ma "forme" dans JavaFx Scene builder. Définir tous les tableaux et les colonnes. Comment puis-je y accéder pour le peupler à partir de java? Ou si quelqu'un peut m'indiquer un bon tutoriel sur cette s'il vous plaît.

j'ai défini mon formulaire JavaFx Scene Builder - seulement un TableView avec 3 Colonnes

<?xml version="1.0" encoding="UTF-8"?>

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

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="288.0" prefWidth="293.0" xmlns:fx="http://javafx.com/fxml">
<children>
    <TableView fx:id="tableView" layoutX="35.0" layoutY="28.0" prefHeight="200.0" prefWidth="227.0">
    <columns>
        <TableColumn prefWidth="75.0" text="UserId" fx:id="UserId" />
        <TableColumn prefWidth="75.0" text="UserName" fx:id="UserName" />
        <TableColumn prefWidth="75.0" text="Active" fx:id="Active" />
    </columns>
    </TableView>
</children>
</AnchorPane>

j'ai mes données dans un ensemble de résultats dans mon code Java.

ResultSet rs = c.createStatement().executeQuery(SQL);
<!-Je dois remplir le TableView.

Merci

18
demandé sur Chrispie 2012-06-25 00:13:24

2 réponses

pour accéder à tableview vous devez définir un controller de votre page FXML. Ajouter

fx:controller="path.to.MyController"

l'attribut AnchorPane dans le fichier FXML. Ensuite, créez le controller et le lien TableView, TableColumns à partir du fichier FXML en mettant @FXML annotation devant ces variables:

package path.to;

public class MyController implements Initializable {

    @FXML private TableView<User> tableView;
    @FXML private TableColumn<User, String> UserId;
    @FXML private TableColumn<User, String> UserName;
    @FXML private TableColumn<User, String> Active;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        UserId.setCellValueFactory(new PropertyValueFactory<User, String>("id"));
        UserName.setCellValueFactory(new PropertyValueFactory<User, String>("name"));
        Active.setCellValueFactory(new PropertyValueFactory<User, String>("active"));

        tableView.getItems().setAll(parseUserList());
    }
    private List<User> parseUserList(){
        // parse and construct User datamodel list by looping your ResultSet rs
        // and return the list   
    }
}

la tableview est peuplée dans le initialize méthode. Notez que dans controller, nous ne créons pas de nouvelles tableview ou tablecolumns, car elles sont déjà créées lorsque le fichier FXML est en cours de chargement. Notez également que les noms des variables TableView et Tablecolumn doivent être les mêmes avec fx:id valeurs dans le fichier FXML correspondant. Alors que UserId, UserName et Active namings ne sont pas des noms commodes, changez-les à la fois dans le fichier FXML et dans le Controller en des noms comme userIdCol, userNameCol et userActiveCol respectivement.

38
répondu Uluk Biy 2012-06-25 09:00:10

Yo pouvez le faire dans votre contrôleur:

 @FXML
private TableView<User> table;
private List<User> users;

@Override
public void initialize(URL url, ResourceBundle rb) {
    // Set the columns width auto size
    table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
    table.getColumns().get(0).prefWidthProperty().bind(table.widthProperty().multiply(0.33));    // 33% for id column size
    table.getColumns().get(1).prefWidthProperty().bind(table.widthProperty().multiply(0.33));   // 33% for dt column size
    table.getColumns().get(2).prefWidthProperty().bind(table.widthProperty().multiply(0.33));    // 33% for cv column size
    table.getItems().setAll(this.users);
}
0
répondu multiplayer1080 2014-05-21 14:00:33