首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当AbstractTableModel调用fireTableStructureChanged时,Java JTable列丢失TableCellRenderer

当AbstractTableModel调用fireTableStructureChanged时,它会通知JTable模型的结构已经发生变化,需要重新绘制表格。这意味着表格的列可能会丢失,因为表格需要重新计算和绘制列的布局。

TableCellRenderer是一个接口,用于自定义表格单元格的渲染方式。它允许我们根据数据类型和需求来自定义单元格的外观和行为。当表格的列发生变化时,原先设置的TableCellRenderer可能无法正确地渲染新的列,导致列丢失。

为了解决这个问题,我们可以在调用fireTableStructureChanged之前,先保存当前的TableCellRenderer设置。然后在重新绘制表格之后,再将保存的TableCellRenderer重新应用到新的列上。

以下是一些常见的解决方法和注意事项:

  1. 在AbstractTableModel的子类中,重写fireTableStructureChanged方法,并在方法中保存当前的TableCellRenderer设置。
代码语言:txt
复制
@Override
public void fireTableStructureChanged() {
    // 保存当前的TableCellRenderer设置
    TableCellRenderer renderer = table.getDefaultRenderer(Object.class);
    // 调用父类的fireTableStructureChanged方法
    super.fireTableStructureChanged();
    // 重新应用TableCellRenderer设置
    table.setDefaultRenderer(Object.class, renderer);
}
  1. 在JTable的初始化过程中,设置默认的TableCellRenderer。
代码语言:txt
复制
JTable table = new JTable();
// 设置默认的TableCellRenderer
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer());
  1. 注意,如果表格的列发生变化,可能还需要更新其他与列相关的设置,如列宽、列排序等。
  2. 推荐的腾讯云相关产品:腾讯云云服务器(CVM)、腾讯云数据库MySQL版、腾讯云对象存储(COS)等。您可以通过腾讯云官方网站获取更详细的产品介绍和文档。

腾讯云云服务器(CVM):提供弹性、安全、稳定的云服务器,适用于各种应用场景。产品介绍和文档链接:腾讯云云服务器(CVM)

腾讯云数据库MySQL版:提供高性能、可扩展的云数据库服务,适用于各种规模的应用。产品介绍和文档链接:腾讯云数据库MySQL版

腾讯云对象存储(COS):提供安全、可靠、低成本的云端存储服务,适用于存储和管理各种类型的数据。产品介绍和文档链接:腾讯云对象存储(COS)

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • jTable插件辅助资料

    ==============================================jTable插件================================================ 【】引入jtable <link rel="stylesheet" type="text/css" href="../jtable/themes/lightcolor/blue/jtable.min.css" /> <script type="text/javascript" src="../jtable/jquery.jtable.min.js"></script> <script type="text/javascript" src="../jtable/localization/jquery.jtable.zh-CN.js"></script> 注:jTable插件需要jquery UI插件。之前要引入jQuery和jQueryUI 【】Servlet生成JSON结果 collegeList=collegeBusiness.getListByAll(); //定义数据返回JSON map Map<String, Object> jsonMap = new HashMap<String, Object>(); jsonMap.put("Result", "OK"); jsonMap.put("Records", collegeList); JSONObject result=JSONObject.fromObject(jsonMap); HttpServletResponse response=ServletActionContext.getResponse(); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); PrintWriter out=response.getWriter(); out.println(result.toString()); out.flush(); out.close(); 【】jtable要求的返回格式 {  "Result":"OK",  "Records":[   {"PersonId":1,"Name":"Benjamin Button","Age":17,"RecordDate":"\/Date(1320259705710)\/"},   {"PersonId":2,"Name":"Douglas Adams","Age":42,"RecordDate":"\/Date(1320259705710)\/"},   {"PersonId":3,"Name":"Isaac Asimov","Age":26,"RecordDate":"\/Date(1320259705710)\/"},   {"PersonId":4,"Name":"Thomas More","Age":65,"RecordDate":"\/Date(1320259705710)\/"}  ] } 【】当出现异常后的jTable要求的结果 {    "Result":"ERROR",    "Message":"异常信息字符串" } 【】jTable的语法  $('#MyTableContainer').jtable({             //General options comes here             actions: {                 //Action definitions comes here             },             fields: {                 //Field definitions comes here             }             //Event handlers... });      【】jtable初始化 1.定义jTable显示的区域div

    2.在JS中初始化jTable //定义部门表格 $('div#departmentmaincontent').jtable({            title: '部门列表',            selecting: true, //Enable selecting            multiselect: false, //not Allow mu

    04

    Swing的介绍

    Swing是一个为java设计的GUI工具包.Swing是JAVA基础类的一部分.Swing包括了图形用户界面(GUI)器件如 : 文本框,按钮,分隔窗格和表.Swing提供许多比AWT更好的屏幕显示元素.它们用纯Java写成,所以同Java本身一样可以跨平台运行,这一点不像AWT.它们是JFC一部分.它们支持可更换的面板和主题,然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们.这意味着你可以在任意平台上使用JAVA支持的任意面板.轻量级组件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为.Swing开发图形界面比AWT更加优秀,因为Swing是一种轻量级组件,它采用100%的java实现,不再依赖于本地平台的,图形界面.,所以可以在所有平台上保持相同的运行效果,对跨平台支持比较出色.由于AWT需要调用底层平台的GUI实现,所以AWT只能使用各种平台上GUI组件的交集,这大大限制了AWT所支持的GUI组件.对Swing而言,几乎所有组件都采用纯Java实现,所以无须考虑底层平台是否支持该组件,因此Swing可以提供如JTabbedPane,JDesktopPane,JInternalFarme等特殊的容器,也可以提供像JTree,JTable,JSpinner,JSlider等特殊的GUI组件.

    02
    领券