[英]Java FX: TableView - display simple HTML
我想知道,如果可以在JavaFX TableView(b,i,下标,supscript)中呈现简单的HTML标签。 在我的代码片段中,我使用了默认的cellValueFactory,但也许有人可以告诉我是否存在允许我显示html的任何单元工厂。
来自代码:
class Data{
private String row = "<b> Sample data</b>"
public String getRow(){
return row;
}
TableView<Data> tableView = new TableView();
TableColumn<Data,String> column = new TableColumn("Sample Column");
column.setCellValueFactory(new PropertyValueFactory<Data, String>("row"));
tableView.getColumns().addAll(column);
我希望我能以粗体显示表格中的示例数据。 提前致谢!
--UPDATE允许我查看我的HTML的代码,但调整表格单元格的大小,WebView大小被忽略而且没有紧缩
private class HTMLCell extends TableCell<Component, Component> {
@Override
protected void updateItem(Component item, boolean empty) {
super.updateItem(item, empty);
if (!empty) {
WebView webView = new WebView();
webView.setMaxWidth(200);
webView.setMaxHeight(50);
WebEngine engine = webView.getEngine();
// setGraphic(new Label("Test"));
setGraphic(webView);
String formula = item.getFormula();
engine.loadContent(formula);
}
}
}
TableColumn<Component, Component> formulaColumn = new TableColumn<>("Formula");
formulaColumn.setMinWidth(300);
formulaColumn.setCellFactory(new Callback<TableColumn<Component, Component>, TableCell<Component, Component>>() {
@Override
public TableCell<Component, Component> call(TableColumn<Component, Component> param) {
return new HTMLCell();
}
});
formulaColumn.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Component, Component>, ObservableValue<Component>>() {
@Override
public ObservableValue<Component> call(CellDataFeatures<Component, Component> param) {
return new SimpleObjectProperty<Component>(param.getValue());
}
});
TableCell中的WebView中的HTML
您必须创建自己的单元工厂,该工厂返回加载HTML内容的WebView节点。
正确调整WebView的大小
在建立WebView节点的首选大小方面,这有点棘手。 如果实现了RT-25005自动首选的WebView大小,那将更简单。
我认为如果您只是使用webView.setPrefSize(prefX,prefY)调用替换WebView的maxSize设置,那么您问题中的示例代码将起作用。 您只需要猜测prefX和prefY值应该是什么,因为我不知道以编程方式确定的好方法。
我认为您的代码应该通过设置WebView的最大大小来工作,但WebView似乎不尊重最大大小设置,只使用pref大小设置,我认为这可能是Java 8b129中的一个错误(您可以提交在JavaFX Issue Tracker中有一个最小的,可执行的测试用例,它可以再现它并描述你的测试环境)。
TextFlow替代方案
您还可以考虑使用TextFlow组件来表示样式化文本。 它不是HTML,但是如果您想要做的只是一些简单的样式,例如在单元格中使用粗体或斜体创建一些文本,那么它可能是一个不错的选择。
在WebEngine / WebView而不是TableView中使用HTML表。 表格示例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.