2012-04-13 3 views
3

Как установить шрифт в столбец в виде таблицы в java fx. У меня есть таблица с 3 столбцами, и я хочу установить разные шрифты для каждого столбца. Кроме того, возможно ли изменить шрифт во время выполнения. Пожалуйста, помогите с некоторым примером кода.Установить шрифт в javafx

ответ

13

Изменение стиля столбца таблицы:

Вы должны использовать TableColumn#setCellFactory() для настройки визуализации элемента ячейки.
Например, DataModel с, как это Person class:

// init code vs.. 
TableColumn firstNameCol = new TableColumn("First Name"); 
firstNameCol.setMinWidth(100); 
firstNameCol.setCellValueFactory(new PropertyValueFactory<Person, String>("firstName")); 
firstNameCol.setCellFactory(getCustomCellFactory("green")); 

TableColumn lastNameCol = new TableColumn("Last Name"); 
lastNameCol.setMinWidth(100); 
lastNameCol.setCellValueFactory(new PropertyValueFactory<Person, String>("lastName")); 
lastNameCol.setCellFactory(getCustomCellFactory("red")); 

table.setItems(data); 
table.getColumns().addAll(firstNameCol, lastNameCol); 

// scene create code vs.. 

и общим getCustomCellFactory() метода:

private Callback<TableColumn<Person, String>, TableCell<Person, String>> getCustomCellFactory(final String color) { 
     return new Callback<TableColumn<Person, String>, TableCell<Person, String>>() { 

      @Override 
      public TableCell<Person, String> call(TableColumn<Person, String> param) { 
       TableCell<Person, String> cell = new TableCell<Person, String>() { 

        @Override 
        public void updateItem(final String item, boolean empty) { 
         if (item != null) { 
          setText(item); 
          setStyle("-fx-text-fill: " + color + ";"); 
         } 
        } 
       }; 
       return cell; 
      } 
     }; 
    } 

Изменение таблицы стиль заголовка столбца:

TableView, как и другие элементы управления в JavaFX использует встроенную таблицу стилей с именем caspian.css, которая поставляется вместе с jfxrt.jar. См. answer of "JavaFX 2 and CSS classes".
Чтобы изменить стиль шрифта столбца вы можете переопределить стиль по умолчанию или изменить его:
Переопределение:

.table-view .column-header{ 
    -fx-text-fill: -fx-selection-bar-text; 
    -fx-font-size: 16; 
    -fx-font-family: "Arial"; 
} 

пользовательской настройки:

#my-custom .table-view .column-header { 
    -fx-text-fill: red; 
    -fx-font-size: 26; 
    -fx-font-family: "Arial"; 
} 

Переопределение эффекты все TableView с в приложении. Так что, если вы предпочитаете, чтобы настроить то, как только вы определили несколько стилей, вы можете применить пользовательский стиль к любому Tableview во время выполнения, как,

myTableView.setId("my-custom"); 
... 
// Apply another style at runtime 
myTableView.setId("my-custom2"); 

Чтобы увидеть, как определить и стиль загрузки и центровки файлы приложения, проверить post of "JavaFX How to set scene background image" ,

Однако использование разных стилей для разных столбцов требует больше усилий, я думаю.

+0

Спасибо за ваш ответ. Это было полезно. Этот стиль применяется для всех заголовков столбцов таблицы. Можно ли подать заявку на каждый столбец. В вашем примере .table-view .column-header { } применяется ко всему заголовку столбца. Мой вопрос заключается в том, какой стиль (синтаксис) должен указывать, что для столбца 1 используйте этот stlye 1, column2 use style 2 .... – user1332356

+0

Я полностью неправильно понял ваш вопрос извинения :). Между тем, я полагаю, вы уже это сделали, но я отредактировал свой ответ для дальнейшего использования. –

-1

какой стиль (синтаксис), чтобы указать, что для столбца 1 используют это Stlye 1, column2 использование стиль 2

Supply a custom cell factory который поставляет cells, к которому вы обратились styleclasses вы определили в CSS. Связанная документация содержит примеры, которые должны предоставить вам достаточную информацию для достижения этой цели.

0

вы можете использовать FXML или CSS-файл, чтобы установить цвет шрифтов ......

# .mainFxmlClass { 
-fx-font-family:nyala,Tahoma,Arial,Helvetica,sans-serif; 
-fx-font-size:1.13em; 
} 

.label{ 
-fx-font-size:1.3em; 
    } 

и звонить и использовать .lable или .mainFxmlClass в файле FXML

Смежные вопросы