当前位置: 首页 > 面试题库 >

Javafx tableview具有来自多个类的数据

孔冥夜
2023-03-14
问题内容

我可以用来自1个班级的不同数据填充表格视图。但这不适用于多个班级。知道如何解决吗?我已经检查了关于stackoverflow的类似问题。但是他们都帮不了我。如果您对“回调”类有任何建议,请提供完整的导入信息,因为那里有几个回调类。

public class MainViewController implements Initializable {

    @FXML
    private TableColumn<TaskControl, Boolean> colErledigt;

    @FXML
    private TableColumn<TaskControl, Character> colPrioritaet;

    @FXML
    private TableColumn<TaskControl, String> colBeschreibung;


    @FXML
    private TableColumn<ProjectControl, String> colProjekt;


    @FXML
    private TableView<TaskControl> tblView;





    public final void initialize(final URL location,
            final ResourceBundle resources) {

        initializeTableElements();

    }


    public final void initializeTableElements() {
        colBeschreibung
                .setCellValueFactory(new PropertyValueFactory<>("description"));

        colPrioritaet
                .setCellValueFactory(new PropertyValueFactory<>("priority"));


        colProjekt.setCellValueFactory(new PropertyValueFactory<>("name"));


        colErledigt.setMaxWidth(50);
        colErledigt.setCellValueFactory(
                new PropertyValueFactory<TaskControl, Boolean>("isDone"));
        colErledigt
                .setCellFactory(CheckBoxTableCell.forTableColumn(colErledigt));
        colErledigt.setEditable(true);

        try {
            tblView.setItems(getObsTasks());
        } catch (IDNotValidException | StringNotValidException e1) {
            System.out.print("FEHLER beim getObsTasks");
        }

        tblView.setEditable(true);
    }


    public ObservableList<TaskControl> getObsTasks()
            throws IDNotValidException, StringNotValidException {

        ObservableList<TaskControl> obsTasks = FXCollections
                .observableArrayList();

        Map<Context, Set<Task>> test = TasksContextUtility.INSTANCE
                .getAllContextsAndTasks();

        test.values().forEach(v -> {
            v.forEach(b -> obsTasks.add((TaskControl) b));
        });

        return obsTasks;
    }

进一步的问题:如何在TableCell的HashSet中显示实例的某个属性。所以我在TaskControl类中有一个HashSet。在该HashSet中,有“
ProjectControl”类的实例。每个ProjectControl实例都具有“名称”或“ id”等属性。

我想尽可能地在一个表单元格中表示项目实例的所有名称。可能是用逗号分隔的字符串(project1,project2,project3 …)。

我的TaskControl类继承自这个类的Task类(简化了很多)

public abstract class Task
  implements Serializable, IDValidatable
{
  private int id;
  private char priority = ' ';
  private final Set<Project> projects = new HashSet();

  public Task(int oid)
    throws IDNotValidException
  {
    if (isIDValid(oid)) {
      this.id = oid;
    } else {
      throw new IDNotValidException("The ID you have specified is not valid!")
      {
        private static final long serialVersionUID = 99044660889990790L;
      };
    }
  }

  public final void setId(int oid)
    throws IDNotValidException
  {
    if (isIDValid(oid)) {
      this.id = oid;
    } else {
      throw new IDNotValidException("The ID you have specified is not valid!")
      {
        private static final long serialVersionUID = 99044660889990790L;
      };
    }
  }

  public final int getId()
  {
    return this.id;
  }

  public final Collection<Context> getContexts()
  {
    return this.contexts;
  }

  public final void addContext(Context context)
    throws ContextNotValidException
  {
    this.contexts.add(context);
  }

  public final void removeContext(Context context)
    throws ContextNotValidException
  {
    this.contexts.remove(context);
  }

  public final Collection<Project> getProjects()
  {
    return this.projects;
  }

  public final void addProject(Project project)
    throws ProjectNotValidException
  {
    this.projects.add(project);
  }

  public final void removeProject(Project project)
    throws ProjectNotValidException
  {
    this.projects.remove(project);
  }

  public final Map<String, String> getAddons()
  {
    return this.addons;
  }
}

问题答案:

通过向我的TaskControl添加一个额外的String来解决它,该String包含它包含的所有项目的名称。它通过在为表列创建ObservableList之前调用的函数获取名称。

private String projectsAsString;
    ...
public final void convertProjectsToString() {

    String projects = "";

    for (Project p : this.getProjects()) {
        ProjectControl pp = (ProjectControl) p;
        projects += pp.getName() + ", ";
    }
    if (projects != null && projects != "" && projects.length() > 4) {
        projects = projects.substring(0, projects.length() - 2);
    }
    this.projectsAsString = projects;
}

无论如何,谢谢你们对我的帮助。



 类似资料:
  • 问题内容: 我有一张供用户使用的表。但是,当用户对其个人资料进行任何更改时,我会将它们存储在临时表中,直到我批准它们为止。然后将数据复制到活动表中,并从临时表中删除。 我想要实现的是,在管理面板中或用户可以在提交前仔细检查的页面中查看数据时,我想编写一个查询,该查询将允许我从两个表中获取ID为ID的表中的数据两者都等于$ userid。然后,我想以表格形式显示它们,其中旧值显示在左列中,而新值显示

  • 我已经创建了一个类似上面的类,我希望能够使用相同的类使用'colour'作为这个类的替代,如下面。 有没有一种方法可以简单地创造出来?

  • 我是相当新的JNI善良,所以请告诉我,如果我是愚蠢的。 我试图将一个自定义异常从C扔到Java层,该层由字符串和整数构成。我无法让ThrowNew()工作,因为它只需要一个字符串参数。我能找到的每个自定义异常的例子都使用ThrowNew()!!Grrrrr 我猜我需要构造一个,并用“扔(jthrowable obj)”扔出去,但我不确定...这和“扔新()”一样吗?? 例如,这就是我需要的: 如果

  • 问题内容: 我想存储有关歌曲文件的信息,这些文件按以下类别分类: 1.流派,例如流行,摇滚,古典等 。2.使用乐器,例如钢琴小提琴等 。3.艺术家 每首歌曲都有许多乐器。每首歌都有很多歌手。 因此,所有关系都是多对多的。我该如何实施?在歌曲实体和这三个类别类型的实体之间建立多对多关系是个好主意吗?还是我应该只有一个继承那些子类别的类别实体? 提前致谢 问题答案: 乐器和艺术家都是“具有”关系的例子

  • 问题内容: 我有一个源输入 input.txt 我想将这些输入馈入程序,如下所示: 所以我尝试使用 xargs ,但是没有运气。 它给 但我想要 任何的想法? 问题答案: 到目前为止给出的解决方案都无法正确处理包含空格的文件名。如果文件名包含“或”,有些甚至会失败。如果输入文件是由用户生成的,则应该准备好使用令人惊讶的文件名。 GNU Parallel 很好地处理了这些文件名,并为您(至少)提供了