【问题标题】:Java FX: TableView - display simple HTMLJavafx:TableView - 显示简单的 HTML
【发布时间】:2014-04-15 14:40:21
【问题描述】:

我想知道,是否可以在 JavaFX TableView 中呈现简单的 HTML 标记(b、i、下标、下标)。在我的代码 sn-p 中,我使用了默认的 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);

我希望我能在表格中以粗体看到示例数据。提前致谢!

--更新 允许我查看我的 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());
   }
  });

【问题讨论】:

    标签: java html javafx tableview


    【解决方案1】:

    TableCell 中 WebView 中的 HTML

    您必须创建自己的单元工厂,它会返回一个 WebView 节点,您可以在其中加载 HTML 内容。

    关于正确调整 WebView 的大小

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

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

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

    TextFlow 替代方案

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

    【讨论】:

    • 是的,好主意,我扩展了标准 TableCell 并将 WebView 设置为图形 (TableCell.setGraphics)。这让我可以显示我的 HTML。我现在唯一的问题是:表格单元格被调整为特大,即使在为 WebView 设置了一些 maxWidth 和 maxHeight 属性之后也是如此。添加简单标签后,所有单元格“包装内容”,但使用 WebView 单元格的尺寸几乎等于 Window。
    • 编辑您的问题并更新它以添加您的 WebView 单元工厂代码。
    • 更新了解释 WebView 大小的答案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-16
      • 2013-03-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多