Java FX:TableView - 显示简单的HTML

时间:2014-03-11 19:40:45

标签: java html javafx tableview

我想知道,如果可以在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());
   }
  });

2 个答案:

答案 0 :(得分:3)

TableCell中的WebView中的HTML

您必须创建自己的单元工厂,返回加载HTML内容的WebView节点。

正确调整WebView的大小

在建立WebView节点的首选大小方面,这有点棘手。如果实施RT-25005 Automatic preferred sizing of WebView 会更简单。

如果您只是使用webView.setPrefSize(prefX,prefY)调用替换WebView的maxSize设置,我认为您问题中的示例代码将起作用。您只需要猜测prefX和prefY值应该是什么,因为我不知道以编程方式确定的好方法。

我认为您的代码应该通过设置WebView的最大大小来工作,但WebView似乎不尊重最大大小设置并且只使用pref大小设置,我认为这可能是Java中的一个错误8b129(您可以在JavaFX Issue Tracker中使用最小的可执行测试用例来复制它以及测试环境的描述。

TextFlow Alternative

您也可以考虑使用TextFlow组件来表示样式文本。它不是HTML,但如果您想要做的只是一些简单的样式,例如在单元格中以粗体或斜体形式创建一些文本,那么它可能是一个不错的选择。

答案 1 :(得分:1)

在WebEngine / WebView而不是TableView中使用HTML表。 Table examples