无法在JavaFX TableView单元格值上显示工具提示

前端之家收集整理的这篇文章主要介绍了无法在JavaFX TableView单元格值上显示工具提示前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在我的JavaFX TableView中,我有一个TableColumn,我已将Cell Factory设置为呈现ProgressBar,而对于其他TableColumns,我已将Cell Factory设置为显示ToolTip.如下图所示.第二列显示进度条,其他3列呈现以显示工具提示,其中包含要显示的简单字符串值.

我遇到的问题是TableView没有在表中显示/显示更新的值,即UI没有验证/刷新/绘制TableView元素.如果我单击ColumnHeader对任何列进行排序,那么我只能看到TableView更新.手动排序表列以刷新表内容没有意义,所以我搜索并找到解决方案来显示/隐藏表列以更新表视图.

为了解决这个问题,我在下面编写了一个代码解决TableView更新/刷新问题,但由于此代码,现在ToolTip不可见.

每个特定时间间隔后更新表视图的代码

  1. class TableProgressBarUpdator implements Runnable {
  2. TableView table;
  3. public TableProgressBarUpdator(TableView fxtable) {
  4. table = fxtable;
  5. }
  6. public void start() {
  7. new Thread(this).start();
  8. }
  9. public void run() {
  10. while (keepUpdating) {
  11. try {
  12. updateProgressbar();
  13. Thread.sleep(1000);
  14. } catch (Exception e) {
  15. LogHandler.doErrorLogging("Error while updating tables cell",e);
  16. }
  17. }
  18. LogHandler.doDebugLogging("Table process repainting is completed.");
  19. }
  20. private void updateProgressbar() throws Exception {
  21. Platform.runLater(new Runnable() {
  22. @Override
  23. public void run() {
  24. ((TableColumn) table.getColumns().get(0)).setVisible(false);
  25. ((TableColumn) table.getColumns().get(0)).setVisible(true);
  26. }
  27. });
  28. }
  29. }

开始更新表视图

  1. public void startUpdatingTableProgress() {
  2. keepUpdating = true;
  3. TableProgressBarUpdator tpu = new TableProgressBarUpdator(table);
  4. tpu.start();
  5. }

停止更新表视图

  1. public void stopUpdatingTableProgress() {
  2. keepUpdating = false;
  3. }

添加更多显示渲染类的代码显示进度条和显示工具提示.

显示进度条表视图的代码.

  1. public static class ProgressBarTableCell

显示工具提示代码

  1. public class ToolTip extends TableCell {
  2. @Override
  3. protected void updateItem(Object object,boolean selected) {
  4. if (object == null) {
  5. setGraphic(null);
  6. setText(null);
  7. }else{
  8. setText(object.toString());
  9. setTooltip(new Tooltip(object.toString()));
  10. }
  11. }
  12. }

问题 –

如果我从TableProgressBarUpdator类中注释掉这两行,那么我可以看到第1,第3和第4列中每个单元格值的工具提示,但现在表格视图内容没有更新/刷新,当我联合评论这些行时,我是无法看到工具提示.

  1. ((TableColumn) table.getColumns().get(0)).setVisible(false);
  2. ((TableColumn) table.getColumns().get(0)).setVisible(true);

总之,由于这两行我的工具提示渲染不起作用,如果我删除这两行,那么表视图内容不是刷新/更新.

最佳答案
您无需手动更新TableView.您的类可能存在与该TableView列关联的问题.

你必须创建如下所示的类:

  1. public static class Test{
  2. private StringProperty name;
  3. private Test() {
  4. name = new SimpleStringProperty();
  5. }
  6. public Test(String name) {
  7. this.name = new SimpleStringProperty(name);
  8. }
  9. public void setName(String name) {
  10. this.name.set(name);
  11. }
  12. public String getName() {
  13. return name.get();
  14. }
  15. public StringProperty nameProperty() {
  16. return name;
  17. }

}

猜你在找的Java相关文章