JTable刷新不显示

2023-12-04

我拼命地试图说服我的JTable当我更改其数据时刷新。数据存储在全局单例中,TreeSet,我正在使用。每当TreeSets 数据被更改,会触发一个事件来刷新TableModel。出于测试目的,我将其替换为一个简单的Timer射击事件。

每次触发事件时,都会从TreeSet被删除以模拟数据的变化。事件触发并且TableClass接收它并按预期处理它,但是当刷新时什么也没有发生。我尝试创建一个新的TableModel每次发生事件并将其设置到全局表中。单例的变化TreeSet已完成,但没有任何反应JTable.

public class TreeTableObj implements ActionListener{
public JTable table ;

public TreeTableObj(){
    MyTableModel myModel = new MyTableModel(getValuesOfTreeSet(), getTreeSetRows());

    table = new JTable( myModel){ //some rendering };

    table.setAutoCreateRowSorter(true);
    }

    class MyTableModel extends AbstractTableModel {
        private String[] columnNames;
        private Object[][] data ;


        public MyTableModel(Object[][] data, String[] columnNames){
            this.data = data;
            this.columnNames = columnNames;
            System.out.println("Model created");
        }

        public int getColumnCount() {
            return columnNames.length;
        }

        public int getRowCount() {
            return data.length;
        }

        public String getColumnName(int col) {
            return columnNames[col];
        }

        public Object getValueAt(int row, int col) {
            return data[row][col];
        }

        public void setData(Object[][] data){
            this.data = data;
            fireTableDataChanged();
        }


        public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }


        public boolean isCellEditable(int row, int col) {
            if (col < 2) {
                return false;
            } else {
                return true;
            }
        }


        public void setValueAt(Object value, int row, int col) {
            if (true) {
                System.out.println("Setting value at " + row + "," + col
                                   + " to " + value
                                   + " (an instance of "
                                   + value.getClass() + ")");
            }

            data[row][col] = value;
            fireTableCellUpdated(row, col);

            if (true) {
                System.out.println("New value of data:");
                printDebugData();
            }
        }

        private void printDebugData() {
            int numRows = getRowCount();
            int numCols = getColumnCount();

            for (int i=0; i < numRows; i++) {
                System.out.print("    row " + i + ":");
                for (int j=0; j < numCols; j++) {
                    System.out.print("  " + data[i][j]);
                }
                System.out.println();
            }
            System.out.println("--------------------------");
        }
    }

    public void refreshTableModel(){
        FlightsTreeSet.getInstance().remove(FlightsTreeSet.getInstance().first());
        table.setModel(new MyTableModel(getValuesOfTreeSet(), getTreeSetRows()));
        }

    public void actionPerformed(ActionEvent arg0) {
        refreshTableModel();    
    }
}

任何帮助,将不胜感激!

[EDIT1]

我越来越接近核心问题: 我发现 JFrame 中显示的表格包含另一个引用作为我更改的引用。我使所有更改可见,并将它们应用于模型。


您的代码中是否缺少某些内容?您的表模型不应编译,因为它缺少 JTable 用于访问数据的所有方法(getColumnCount(), getValueAt(), etc.)

另外,您不必在每次更改时创建新模型 - 只需拥有模型即可fireTableStructureChanged().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JTable刷新不显示 的相关文章

随机推荐

  • Google Map API V3:MarkerClusterer 不会分解为标记

    我有一个应用程序 我使用 Google Map API 来显示用户使用其纬度 经度发布的帖子的标记 我使用了 MarkerClusterer 功能来更好地组织标记 该功能可以工作 但存在一些错误 本质上 我一直在家里对此进行测试 因此所有测
  • 我对 Sails.js 水线一对一关联逻辑感到困惑

    所以我感到困惑的原因是因为我是一名 PHP 开发人员并且经常使用 Laravel 和 FuelPHP 我真正不明白的是协会本身 我的意思是 我想创建一个基本的 hasOne BelongsTo 逻辑 其中包含以下内容 用户只有一份个人资料
  • 在 Scala 中计算最多 5 的中位数

    因此 在回答其他一些问题时 我偶然发现计算 5 的中位数的必要性 现在 有一个类似的问题用另一种语言 但我想要一个 Scala 算法 但我不确定我对我的算法是否满意 这是一个不可变的 Scala 版本 它具有最少的比较次数 6 并且看起来不
  • 由于 reticulate_python 导致闪亮应用程序部署出现问题

    我有一个应用程序想要部署在shinyapps io 上 我认为值得注意的是 应用程序中的数据是从 athena 的数据库中提取的 我用了这个包Rathena连接到数据库以及所有用于从我的计算机本地运行良好的内容 但是 我尝试将其部署到shi
  • 如何正确隐藏这些广告横幅?

    Sprite Kit 游戏 我希望在游戏过程中隐藏我的广告横幅 我已经将我的项目设置为包含 iAd 和 AdMob 广告横幅 在添加 AdMob SDK 和 AdMob 广告代码之前 当我想要隐藏 iAd 横幅时 隐藏它没有任何问题 现在由
  • 具有导出选项(如数据表)的等效单个 Html 文件

    我使用 DataTables 使用静态数据创建了一个 HTML 表 带有导出选项 搜索 分页 plnkr co edit n3cbx8GrGoJtOpgbxE32 p preview 类似的示例或工作 html 可在 angular ui
  • 登录对话框 PyQt

    当客户询问我是否可以在应用程序启动时实现某种登录表单时 我几乎完成了我的应用程序 到目前为止 我已经设计了用户界面 并修改了实际的执行 用户名和密码目前无关紧要 class Login QtGui QDialog def init self
  • 我无法使用 ctypes 访问 C++ 类属性

    我正在使用 ctypes 为 C 库开发一种 Python API 到目前为止 一切都很顺利 但是 我将操作系统从 Ubuntu 20 4 LTS 升级到 22 04 现在使用 Python3 10 6 和 g 11 3 0 但即使使用 g
  • 将基于Box的树结构适配为Rc+RefCell时如何处理“临时值丢失”错误?

    我创建了一个树 其类型定义类似于 derive Debug Clone pub crate struct TreeBox
  • 配置 gvim 设置颜色和字体

    我想尝试一下 vim 但是配置文件有点问题 我这里已经安装了gvimC Program Files x86 Vim vim73并添加了一个名为C Program Files x86 Vim vim73 vimrc 但是当我尝试不同的配置时
  • 通过 FTP 将文件发送到服务器,但结果到达时字节大小为零

    我正在尝试使用 FTPClient 将文件上传到数据库服务器 显示文件传输成功 但文件为空 大小为0字节 下面是我用来构建的源代码 有人能解决这个问题吗 package Examples import org apache commons
  • 如何在 JOIN 的 WHERE 子句中使用列名作为 LIKE 语句的一部分

    LEFT OUTER JOIN INVENTTRANS ON TEMP VOUCHERPHYSICAL INVENTTRANS VOUCHERPHYSICAL WHERE INVENTTRANS ITEMID Temp INVENTDIMI
  • Logstash 文件输入:sincedb_path

    重新启动 Logstash 后 有时会观察到 Logstash 会重复日志事件 想知道什么是正确的申请方式start position sincedb path sincedb write interval配置选项 当同一位置有多个文件时会
  • 立即将图像加载到内存中

    我需要将 WPF 中的 Tiff 图像中的所有帧打开到内存中 然后删除源 之后我最终需要渲染该图像 根据窗口大小调整大小 我的解决方案非常慢 我无法在第一次请求之前删除文件源 有什么最佳实践吗 Use CacheOption BitmapC
  • Python/格式 - 列表和宽度

    到目前为止 我的列表的格式是这样的 print gt 15 gt 15 gt 15 gt 15 format i liste l 我对 python 很陌生 我不知道如何通过动态设置动态宽度 我的意思是 len total int len
  • 如何按起始字符范围进行选择?

    这是我的 mySQL 查询 SELECT FROM eodList WHERE datechanged gt curdate GROUP BY symbolName ORDER BY dateChanged DESC 我如何获取所有行 例如
  • MySQL JOIN 和 COUNT 在单个查询中

    我正在尝试将两个表连接在一起并获取外键的计数 抱歉 我真的不知道如何解释自己 所以让我演示一下 我有 1 个表 订单 用于订单 包含以下字段 id f name l name credit card ETC 然后 我有一个订单中的项目的 o
  • 确定一个符号是否是第 i 个组合 nCr 的一部分

    更新 组合学和取消排名最终是我所需要的 下面的链接有很大帮助 http msdn microsoft com en us library aa289166 v vs 71 aspx http www codeproject com Arti
  • 如何为 Google Cloud Function 分配内存?

    今天我在云函数中遇到这个错误 函数被杀死 错误 超出内存限制 我的功能是基于经过身份验证的 json api 示例Firebase 示例函数 因为它工作起来就像一个魅力 我用多个路由和多个任务扩展了它 比如连接多个外部 api 将 base
  • JTable刷新不显示

    我拼命地试图说服我的JTable当我更改其数据时刷新 数据存储在全局单例中 TreeSet 我正在使用 每当TreeSets 数据被更改 会触发一个事件来刷新TableModel 出于测试目的 我将其替换为一个简单的Timer射击事件 每次