【发布时间】:2012-04-26 04:49:25
【问题描述】:
如何在 java fx 的表格视图中将字体设置为列。我有一个包含 3 列的表格,我想为每一列设置不同的字体。另外,是否可以在运行时更改字体。请提供一些示例代码。
【问题讨论】:
标签: javafx
如何在 java fx 的表格视图中将字体设置为列。我有一个包含 3 列的表格,我想为每一列设置不同的字体。另外,是否可以在运行时更改字体。请提供一些示例代码。
【问题讨论】:
标签: javafx
您应该使用TableColumn#setCellFactory() 来自定义单元格项目渲染。
例如,像这样的数据模型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 的其他控件一样,使用与 jfxrt.jar 捆绑在一起的名为 caspian.css 的内置样式表。请参阅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";
}
覆盖应用中所有TableViews 的效果。因此,如果您更喜欢自定义,那么一旦您定义了多个样式,您就可以在运行时将自定义样式应用于任何 tableview,
myTableView.setId("my-custom");
...
// Apply another style at runtime
myTableView.setId("my-custom2");
要了解如何定义样式表文件并将其加载到应用程序,请查看post of "JavaFX How to set scene background image"。
但是,我认为将不同的样式应用于不同的列需要更多的努力。
【讨论】:
modena.css,而不是 caspian.css。
您可以使用 fxml 或 css 文件来设置字体颜色......
# .mainFxmlClass {
-fx-font-family:nyala,Tahoma,Arial,Helvetica,sans-serif;
-fx-font-size:1.13em;
}
.label{
-fx-font-size:1.3em;
}
并在 fxml 文件中调用和使用 .lable 或 .mainFxmlClass
【讨论】:
什么样式(语法)指定第 1 列使用此样式 1,第 2 列使用样式 2
Supply a custom cell factory 提供 cells,您已将在 css 中定义的样式类应用到该 cells 上。链接文档包含的示例应该为您提供足够的信息来实现这一目标。
【讨论】: