显示简单html

rjzwgtxy  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(326)

我想知道,是否有可能在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());
   }
  });
afdcj2ne

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,但是如果您只想做一些简单的样式,比如在单元格中加粗或斜体,那么它可能是一个不错的选择。

3mpgtkmj

3mpgtkmj2#

在webengine/webview中使用html表,而不是tableview。表格示例

相关问题