JavaFX:TableView-显示简单HTML
我想知道,是否有可能在JavaFXTableView(b,I,subscript,supscript)中呈现简单的HTML标记。在我的代码片段中,我使用了默认的cellValueFactory,但也许有人可以告诉我是否存在允许我显示html的任何CellFactory 从代码:JavaFX:TableView-显示简单HTML,java,html,javafx,tableview,Java,Html,Javafx,Tableview,我想知道,是否有可能在JavaFXTableView(b,I,subscript,supscript)中呈现简单的HTML标记。在我的代码片段中,我使用了默认的cellValueFactory,但也许有人可以告诉我是否存在允许我显示html的任何CellFactory 从代码: class Data{ private String row = "<b> Sample data</b>" public String getRow(){ re
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);
类数据{
私有字符串row=“示例数据”
公共字符串getRow(){
返回行;
}
TableView TableView=新建TableView();
TableColumn column=新的TableColumn(“样本柱”);
column.setCellValueFactory(新的PropertyValueFactory(“行”);
tableView.getColumns().addAll(column);
我希望我能在我的表格中看到粗体的样本数据。提前谢谢
--更新
允许我查看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());
}
});
私有类HTMLCell扩展了TableCell{
@凌驾
受保护的void updateItem(组件项,布尔值为空){
super.updateItem(项,空);
如果(!空){
WebView WebView=新建WebView();
webView.setMaxWidth(200);
webView.setMaxHeight(50);
WebEngine=webView.getEngine();
//设置图形(新标签(“测试”);
setGraphic(网络视图);
字符串公式=item.getFormula();
发动机负荷(公式);
}
}
}
TableColumn formulaColumn=新的TableColumn(“公式”);
公式列。设置最小宽度(300);
setCellFactory(新回调(){
@凌驾
公共TableCell调用(TableColumn参数){
返回新的HTMLCell();
}
});
formulaColumn.setCellValueFactory(新回调(){
@凌驾
公共observeValue调用(CellDataFeatures参数){
返回新的SimpleObject属性(param.getValue());
}
});
表格单元格中Web视图中的HTML
您必须创建自己的单元工厂,它返回一个WebView节点,您可以将HTML内容加载到该节点中
正确调整网络视图的大小
就确定WebView节点的首选大小而言,这有点棘手。如果实现了,会更简单
我认为,如果您只是用WebView.setPrefSize(prefX,prefY)调用替换WebView的maxSize设置,那么您的问题中的示例代码将起作用。您只需猜测prefX和prefY值应该是什么,因为我不知道以编程方式确定的好方法
我认为您的代码应该通过设置WebView的最大大小来工作,但是WebView似乎不尊重最大大小设置,而只是使用pref size设置,我认为这可能是Java 8b129中的一个错误(您可以在中使用一个最小的可执行测试用例来复制它并描述您的测试环境)
文本流备选方案
您也可以考虑使用组件来表示您的样式文本。它不是HTML,但是如果您想做的只是一些简单的样式,比如在单元格中粗体或斜体地制作一些文本,这可能是一个不错的选择。
在WebEngy/WebVIEW中使用HTML表而不是TabelVIEW。
是的,好主意,我扩展了标准TableCell并将WebView设置为图形(TableCell.setGraphics)。这允许我显示我的HTML。现在唯一的问题是:即使在WebView中设置了一些maxWidth和maxHeight属性之后,表格单元格的大小也被调整为超大。添加简单标签后,所有单元格都“包装内容”,但使用WebView时,单元格的尺寸几乎等于窗口的尺寸。编辑您的问题并进行更新以添加您的WebView单元格工厂代码。更新答案以解释WebView大小。