Подтвердить что ты не робот

Выравнивание текста в JavaFX TableView

enter image description here

Как вы можете видеть на картинке, выравнивание текста для каждого столбца устанавливается на выравнивание влево. Есть ли способ изменить это? До сих пор я пробовал в своем CSS файле:

#Cols{
    text-align: right;
}

Я также пробовал:

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

Кто-нибудь знает, как я могу изменить выравнивание вправо?

4b9b3361

Ответ 1

Выравнивание всех столбцов таблицы:

Начиная с JavaFX-8, вы можете использовать новый CSS-селектор table-column,

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

Для JavaFX-2, Для этого определите селектор 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;
}

и установите идентификатор tableview.

tableView.setId("my-table");


Выравнивание столбца отдельной таблицы:

Начиная с JavaFX-8, вы можете применить стиль непосредственно к TableColumn,

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

или с помощью css,

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

где

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

Для JavaFX-2,
Чтобы применить различные выравнивания к различным столбцам, вам нужно установить ячейку factory для этого столбца. Например, предположим, что 1-й столбец в вашей таблице должен быть выровнен слева, а в других столбцах используется выравнивание по умолчанию таблицы (CENTER-RIGHT в вашем случае).

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;
            }
        });

Ответ 2

Я использовал

cell.setAlignment(Pos.CENTER_RIGHT);

вместо

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

Но если для этого есть CSS, который я не могу поместить в столбец fx: id, а затем поместить его в файл CSS? Это намного больше кода, чтобы установить выравнивание столбцов.

Ответ 3

Даже это два года, вот еще один ответ. Для каждого столбца таблицы существует класс стиля css по умолчанию .table-column, поэтому, если вы хотите изменить все столбцы таблицы для выравнивания вправо, нужно только поместить это в таблицу стилей или встроенный стиль:

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

и если у вас есть столбец, который должен быть выровнен другим способом, например, заголовок строки, без проблем, присоедините идентификатор к этому столбцу, например rowHeading и напишите в вашей таблице стилей или встроенном стиле:

#rowHeading {
  -fx-alignment: CENTER_LEFT;
}

и его следует оставить в центре. Нет необходимости в огромном кодировании.

Ответ 4

Я пробовал это, и он работает

@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);
    }
}