6
votes

Comment définir des éléments pour JavaFX TableView - Objet contient un autre objet?

Je veux être court que possible sans omettre des informations utiles. J'ai la classe suivante: xxx pré>

J'ai un autre client de classe, celui-ci a un membre d'adresse P> xxx pré>

et une interface JAVAFX avec un Contrôleur contenant un objet de la TableView qui devrait produire dans 3 colonnes les membres de la classe client et le membre de la ville de la classe d'adresses pour l'objet donné. Ma définition de la tableView and TapeColumn est le code suivant P>

public class SettingsController {
TableColumn<Client, String> clientNameCol;
TableColumn<Client, String> clientEmailCol;
TableColumn<Client, String> clientCityCol;
private TableView<Client> clientSettingsTableView;
...
...
    clientNameCol = new TableColumn<>("Name");
    clientNameCol.setCellValueFactory(new PropertyValueFactory<Client, String>("name"));

    clientEmailCol = new TableColumn<>("email");
    clientEmailCol.setCellValueFactory(new PropertyValueFactory<Client, String>("email"));

    clientCityCol = new TableColumn<>("City");
    clientCityCol.setCellValueFactory(new PropertyValueFactory<Client, String>("city"));

    clientSettingsTableView.setItems(clientData);
    clientSettingsTableView.getColumns().clear();
    clientSettingsTableView.getColumns().addAll(clientNameCol, clientEmailCol, clientCityCol);


1 commentaires

3 Réponses :


7
votes

@Invariant Merci pour votre aide, j'ai googlé un peu plus et j'ai fini par la solution suivante:

clientCityCol = new TableColumn<>("City");
clientCityCol.setCellValueFactory(new PropertyValueFactory<Client, Address>("address"));
// ======== setting the cell factory for the city column  
clientCityCol.setCellFactory(new Callback<TableColumn<Client, Address>, TableCell<Client, Address>>(){

        @Override
        public TableCell<Client, Address> call(TableColumn<Client, Address> param) {

            TableCell<Client, Address> cityCell = new TableCell<Client, Address>(){

                @Override
                protected void updateItem(Address item, boolean empty) {
                    if (item != null) {
                        Label cityLabel = new Label(item.getCity());
                        setGraphic(cityLabel);
                    }
                }                    
            };               

            return cityCell;                
        }

    });


2 commentaires

J'ai vraiment aidé @Markus merci +1. Cela doit être une situation de conception courante, mais je trouve une monnaie d'information sur le Web. Pour tous les futurs visiteurs, il n'y a-t-il pas quelque chose dans la documentation officielle à ce sujet?


Juste ce que je cherchais, vous pouvez réellement dessiner tout ce que vous voulez sur upmestItem



0
votes

Cela fonctionne dans FXML?

Considérez le code suivant:

Travailler de cette façon j'ai une cellule vierge.


2 commentaires

Est-ce une question ou une réponse?


Merci pour cette réponse. Je pense que je viens de découvrir un tout autre aspect de JavaFX FXML



0
votes

Vous avez oublié de mentionner que vous devez modifier la définition de clientCityCol TableColumn ClientCityCol; dans TableColumn ClientCityCol; Sinon il a gagné 'T Travailler.


0 commentaires