JTable 及其与数据源的关系

JTable and its Relationship with the Data Source

我正在构建一个程序,该程序收集符合一组特定条件的文件的几个列表,并根据来源、文件类型等适当地处理它们...我希望它会查找文件并将它们显示在易于阅读的列表中。用户将从列表中 select 哪些文件将被处理,然后点击 "starts the commotion," 按钮。

现在,我制作了一个名为 DrawingFile 的 class,看起来像:

class DrawingFile {

private static String fileName, fileType;
private static boolean actionable;
private static Path filePath;

public DrawingFile (Path path){
    setFilePath(path);
    setFileName(stripExtension(path));
    setFileType(getExtension(path));
    setActionable(true);
}
...(methods omitted to save time)...

我的计划最初是创建一个基于 DrawingFiles 列表填充的 JTable,其中对象中的每个字段都是 table 中的一列,但不会显示的路径除外在 table 上。从那里,用户将单击一个复选框,该复选框将决定是否要对文件进行操作。

我的问题首先源于我对编程还比较陌生。这是我编写的第一个人们将要使用的程序,它也有任何类型的 UI.

因此我的问题是:

  1. 我的上述计划是否有意义?
  2. 将 table 排除在外并在容器内创建一系列 JPanel 是否更有意义? (这似乎不是最佳做法)
  3. 如果我选择 table,我是否应该废弃 DrawingFile class 并将数据存储在 TableModel 中? 3a.如果是这样,有没有办法可以隐藏 table 中的路径?
  4. actionable 布尔值在 table 上(未)选中时如何更改它?
  5. 在 1-10 的范围内,我对这个问题的思考有多严重?
  1. 如果我没理解错的话,您有一个 DrawingFile 对象列表,并希望将此列表显示为 JTable,其中每一行代表列表的一个对象。是的,这很有道理。
  2. 没有。 table 非常适合。
  3. 没有。您应该创建一个自定义 DrawingFileTableModel class,扩展 AsbtractTableModel,并使用对象列表作为源来实现该方法。 Google 对应 "Java tutorial JTable",您将在 the official tutorial 中找到示例。
  4. 通过确保 isCellEditable() return 对于该列和行为真,并正确实施 setValueAt()getColumnClass() 方法。 javadoc 和教程是您的朋友。 setValueAt(),当使用布尔列的索引调用时,应在存储在后备列表中给定行索引处的 DrawingFile 中设置其新值。 getColumnClass(),当用布尔列的索引调用时,应该return Boolean.class.