web-dev-qa-db-fra.com

Alignement du texte JavaFX TableView

enter image description here

Comme vous pouvez le voir sur l'image, l'alignement du texte pour chaque colonne est réglé sur l'alignement à gauche. Est-ce qu'il y a une façon de changer ceci-ci? Jusqu'à présent, j'ai essayé dans mon fichier CSS:

#Cols{
    text-align: right;
}

J'ai aussi essayé:

#Cols{
    -fx-text-alignment: right;
}

Est-ce que quelqu'un sait comment je peux changer l'alignement vers la droite?

39
Marc Rasmussen

Alignement de toutes les colonnes du tableau:

À partir de JavaFX-8, vous pouvez utiliser le sélecteur CSS nouvellement défini table-column,

#my-table .table-column {
  -fx-alignment: CENTER-RIGHT;
}

Pour JavaFX-2, pour cela, définissez un sélecteur CSS:

#my-table .table-cell {
    -fx-alignment: CENTER-RIGHT;
     /* The rest is from caspian.css */

    -fx-skin: "com.Sun.javafx.scene.control.skin.TableCellSkin";
    -fx-padding: 0.166667em; /* 2px, plus border adds 1px */

    -fx-background-color: transparent;
    -fx-border-color: transparent -fx-table-cell-border-color transparent transparent;
    -fx-border-width: 0.083333em; /* 1 */
    -fx-cell-size: 2.0em; /* 24 */
    -fx-text-fill: -fx-text-inner-color;
}

et définissez l'identifiant de tableview.

tableView.setId("my-table");


Alignement d'une colonne de table unique:

À partir de JavaFX-8, vous pouvez appliquer le style directement à TableColumn,

firstTextCol.setStyle( "-fx-alignment: CENTER-RIGHT;");

ou avec css,

firstTextCol.getStyleClass().add( "custom-align");

.custom-align { 
  -fx-alignment: center-right; 
} 

Pour JavaFX-2,
Pour appliquer différents alignements à différentes colonnes, vous devez définir la fabrique de cellules pour cette colonne. Par exemple, supposez que la 1ère colonne de votre tableau doit être alignée à gauche tandis que les autres colonnes utilisent l'alignement par défaut du tableau (CENTER-RIGHT dans ton cas).

firstTextCol.setCellFactory(new Callback<TableColumn, TableCell>() {
            public TableCell call(TableColumn p) {
                TableCell cell = new TableCell<Person, String>() {
                    @Override
                    public void updateItem(String item, boolean empty) {
                        super.updateItem(item, empty);
                        setText(empty ? null : getString());
                        setGraphic(null);
                    }

                    private String getString() {
                        return getItem() == null ? "" : getItem().toString();
                    }
                };

                cell.setStyle("-fx-alignment: CENTER-LEFT;");
                return cell;
            }
        });
68
Uluk Biy

Une solution rapide consiste à sélectionner la colonne dans SceneBuilder et à ajouter simplement la propriété au champ de style

enter image description here

5
sbjorng

Même si cela a deux ans, voici une autre réponse. Pour chaque colonne de table existe une classe de style css par défaut .table-column, donc si vous voulez changer toutes les colonnes du tableau pour justifier au centre à droite, il suffit de le mettre dans une feuille de style ou un style en ligne:

.table-column {
  -fx-alignment: CENTER_RIGHT;
}

et si vous avez une colonne qui doit être alignée d'une autre manière, comme un en-tête de ligne, pas de problème du tout, attachez un identifiant à cette colonne comme rowHeading et écrivez dans votre feuille de style ou style en ligne:

#rowHeading {
  -fx-alignment: CENTER_LEFT;
}

et il doit être laissé centré. Pas besoin de codage énorme.

5
NwDev

J'ai utilisé

cell.setAlignment(Pos.CENTER_RIGHT);

au lieu de

cell.setStyle("-fx-alignment: CENTER-LEFT;");

Mais s'il y a du CSS pour cela, que ne puis-je pas mettre fx: id sur une colonne puis mettre l'alignement pour cela dans un fichier CSS? C'est beaucoup de code ci-dessus juste pour définir l'alignement des colonnes.

4
user2233433

j'ai essayé ça et ça marche

@FXML private TableColumn<BookingData,String>colClientMobile;

//Some code
colClientMobile.setCellFactory(new Callback<TableColumn<BookingData, String>, TableCell<BookingData, String>>() {
        @Override
        public TableCell<BookingData, String> call(TableColumn<BookingData, String> param) {
            return new TableCellFormat();
        }
    });

private class TableCellFormat extends TableCell<BookingData, String>{
    @Override
    protected void updateItem(String item, boolean empty) {
        super.updateItem(item, empty); 
        this.setText(item);
        this.setAlignment(Pos.CENTER_RIGHT);
    }
}
1
Francis