我想知道,是否有可能在javafx tableview(b,i,subscript,supscript)中呈现简单的html标记。在我的代码片段中,我使用了默认的cellvaluefactory,但是也许有人可以告诉我是否存在允许我显示html的任何CellFactory。
源代码:
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);
我希望能在我的表格中看到粗体的示例数据。提前谢谢!
--更新代码,允许我看到我的html,但调整表单元格的大小,webview大小被忽略,没有 Package 紧
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());
}
});
2条答案
按热度按时间afdcj2ne1#
tablecell中webview中的html
您必须创建自己的单元工厂,它返回一个webview节点,您可以将html内容加载到该节点中。
关于正确调整webview的大小
在确定webview节点的首选大小方面,这有点棘手。如果实现rt-25005自动调整webview的首选大小,会更简单。
我认为,如果您只是用webview.setprefsize(prefx,prefy)调用替换webview的maxsize设置,那么问题中的示例代码就可以工作了。您只需猜测prefx和prefy值应该是什么,因为我不知道如何通过编程确定。
我认为您的代码应该通过设置webview的最大大小来工作,但是webview似乎不尊重最大大小设置,只使用pref size设置,我认为这可能是Java8B129中的一个bug(您可以在javafx问题跟踪器中以最小的,可执行的测试用例,其中复制了它和测试环境的描述)。
文本流替代
您还可以考虑使用textflow组件来表示样式化的文本。它不是html,但是如果您只想做一些简单的样式,比如在单元格中加粗或斜体,那么它可能是一个不错的选择。
3mpgtkmj2#
在webengine/webview中使用html表,而不是tableview。表格示例