2017-10-12 4 views
0

Je construis une table en JAVA mais certaines lignes doivent être complètement différentes de celles basées sur les options.Puis-je obtenir un contrôle granulaire de la représentation d'une ligne dans JAVA?

En PHP I boucle pourrait un ensemble de données et d'appliquer une instruction IF et changer la façon dont une ligne est renedred dans une page Web

while($r = $sth->fetch()){ 
    if ($r['status']=='good'){ 
     echo '<tr><td>This is good</td><td>yes it is</td></tr>'; 
    } 
    else{ 
     echo '<tr><td colspan="2">this is bad</td></tr>'; 
    } 
} 

Je ne connais qu'une seule façon de rendre une table en JAVA:

TableView<StatuTable> table = new TableView(); 

TableColumn<StatuTable, String> statusColumn = new TableColumn<>("Status"); 
statusColumn .setCellValueFactory(new PropertyValueFactory<>("status")); 

TableColumn<StatuTable, String> noteColumn = new TableColumn<>("Note"); 
noteColumn .setCellValueFactory(new PropertyValueFactory<>("note")); 

//loop the statusGroup defined elsewhere 
    ObservableList<StatusTable> statusList = FXCollections.observableArrayList(); 
    for (Status status: statusGroup.getStatusRows()){ 
     Can I alter the table row here: 
     if (status.getStatusType.equals("good")){ 
      //make a different kind of row. 
     } 
     statusList.add(status); 
    } 

    table .setItems(statusList); 

    //this part is black magic as far as i am concerned 
    scheduleTable.getColumns().addAll(statusColumn, noteColumn); 
+0

Commencez par avoir un regard sur les [JavaDocs ] (https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TableView.html), recherchez la section intitulée * "Personnalisation de TableView Visuals" *. Alors peut-être quelque chose comme [JavaFX 8 TableView Cell Renderer] (http://code.makery.ch/blog/javafx-8-tableview-cell-renderer/) pourrait aider – MadProgrammer

+0

ouais, j'ai lu le rendu de la cellule table-er mais je ne suis pas sûr si je peux faire une colonne de colonnes. Bien qu'il le fasse cliquer dans la customCellFactory, je peux interroger l'élément pour sa valeur. –

+0

Vous pouvez faire en sorte que les en-têtes s'étendent sur des colonnes, mais il n'y a pas de moyen simple de faire passer une cellule sur plusieurs colonnes. Cela peut être théoriquement possible, mais toute solution est susceptible d'être élaborée et de s'appuyer sur des comportements qui ne sont pas garantis. – VGR

Répondre

0

En empruntant l'exemple de cette réponse (https://stackoverflow.com/a/16864130/866021), vous pouvez le faire via la fonction getStyleClass() sur votre TableRow.

Ajouter une classe de style approprié à votre ligne:

nameRow.getStyleClass().add("italic"); 

Ajouter une feuille de style à votre scène qui définit le style italiques pour les cellules de table:

.italic.table-cell { -fx-font-style: italic; } 
+0

ok .. Et puis-je passer des colonnes pour certaines lignes? –

+0

Jetez un oeil à cette réponse pour de l'aide avec cela: https://stackoverflow.com/q/33970786/866021 –

+0

ok, c'est un pas dans la bonne direction .. Je peux voir que je peux nicher avec: nameColumn.getColumns() .addAll (firstNameColumn, lastNameColumn); Est-ce que je ferais alors une usine de cellules faite sur commande et découvrirais si j'ai besoin d'imbriquer ou pas? –