4

如何在 java fx 中将字体设置为表视图中的列。我有一个包含 3 列的表格,我想为每一列设置不同的字体。另外,是否可以在运行时更改字体。请帮助提供一些示例代码。

4

3 回答 3

14

更改表格列样式:

您应该使用TableColumn#setCellFactory()自定义单元格项目呈现。
例如,具有这样的Person 类的数据模型:

// 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 捆绑在一起。请参阅“JavaFX 2 和 CSS 类”的答案
要更改列字体样式,您可以覆盖默认样式或自定义它:
覆盖:

.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");

要了解如何定义样式表文件并将其加载到应用程序,请查看“JavaFX 如何设置场景背景图像”的帖子

但是,我认为将不同的样式应用于不同的列需要更多的努力。

于 2012-04-13T22:20:34.690 回答
0

您可以使用 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

于 2013-05-28T03:31:15.620 回答
-1

什么样式(语法)指定第 1 列使用此样式 1,第 2 列使用样式 2

提供一个自定义单元工厂,该工厂提供已应用您在 css 中定义的样式类的单元。链接的文档包含示例,这些示例应该为您提供足够的信息来实现这一点。

于 2012-05-16T19:37:50.700 回答