【问题标题】:JTable and its Relationship with the Data SourceJTable 及其与数据源的关系
【发布时间】:2023-12-22 15:58:01
【问题描述】:

我正在构建一个程序,该程序会收集与一组特定条件匹配的文件列表,并根据源、文件类型等适当地操作它们...我希望它会找到文件并将它们显示在易于阅读的列表中。用户将从列表中选择要处理的文件,然后点击“开始骚动”按钮。

现在,我创建了一个名为 DrawingFile 的类,如下所示:

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)...

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

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

因此我的问题是:

  1. 我上面的计划有任何意义吗?
  2. 将表放在其中并在容器内创建一系列 JPanel 是否更有意义? (这似乎不是最佳做法)
  3. 如果我使用表格,是否应该废弃 DrawingFile 类并将数据存储在 TableModel 中? 3a。如果是这样,有没有办法可以隐藏表格中的路径?
  4. actionable 布尔值在表上被(取消)选中时,我该如何更改它?
  5. 在 1 到 10 的范围内,我想得太多了?

【问题讨论】:

    标签: java swing user-interface jtable jpanel


    【解决方案1】:
    1. 如果我理解正确,您有一个 DrawingFile 对象列表,并希望将此列表显示为 JTable,其中每一行代表列表中的一个对象。是的,这很有道理。
    2. 没有。一张桌子非常适合。
    3. 没有。您应该创建一个自定义的 DrawingFileTableModel 类,扩展 AsbtractTableModel,并使用对象列表作为源来实现该方法。谷歌搜索“Java 教程 JTable”,您会在 the official tutorial 中找到一个示例。
    4. 通过确保isCellEditable() 为该列和行返回true,并正确实现setValueAt()getColumnClass() 方法。 javadoc 和教程是你的朋友。 setValueAt(),当使用布尔列的索引调用时,应在存储在后备列表中给定行索引处的 DrawingFile 中设置其新值。 getColumnClass(),当使用布尔列的索引调用时,应该返回Boolean.class

    【讨论】:

    • 很高兴看到我走在正确的道路上。我打算链接那个教程,但我打字的时候一定忘记了。如果您不介意,我可以输入我认为您提到的方法应该是什么样子并让您查看它们吗?
    • 你可以这样做。但最简单的方法只是测试它是否按预期工作。
    • 确实如此。像梦一样工作。感谢您的帮助。
    最近更新 更多