首页
学习
活动
专区
工具
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)

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

相关·内容

java swing项目桌面软件还是蛮香的,至少有了我自己的桌面软件|Java 开发实战

今天看了看自己的java swing的程序,感觉写的还不错,但是发现现在遇到一个瓶颈问题,就是jtable的使用,由于一开始概念不理解现在jtable得重新写,之前我吧数据放在jtable上了,但是真正开发的...JTable数据显示java swing中jtable是mvc形式的,所以jtable仅仅是数据的显示,而真正和数据绑定的却是TableModel这个接口,我们先看看这个接口的内部有哪些方法,这样我们心里才有个底...//表格的,需要用户自己设定好private int column;//待加载的数据 数据每行的数和上面要统一好private List list;public MyTableModel...渲染和编辑这种呢其实就是上面的getClass底层的实现方式,JTable中源码我们上面可以看出JTable通过返回的不同的类来调用不同的渲染器,现在我们不通过返回类的方式来渲染,而是自己定义一个渲染器...继承TableCellRenderer类,通过getTableCellRendererComponent方法返回渲染成设么控件,渲染的控件我们可以进行二次封装。

33710

如何在Java中使用Table

大家好,我是小面,今天给大家分享一下在java中如何运用Table。 在Java中,表用于将数据排列成和行。是表中水平排列的空间,而行是表中垂直排列的空间。...和行之间的交点称为单元格,用于保存单条数据。 在Java中,开发人员可以使用JTable方法在其应用程序中创建表。JTable是从JComponent类继承的Swing组件。...frame.setLocationRelativeTo(null); frame.setVisible(true); } } 如果在Idea中运行此代码,它将生成以下输出: 您单击上述任何一个单元格...开发人员没有向JTable的构造函数提供表模型,将自动为其创建DefaultTableModel的实例。...但是,您可以将表添加到滚动窗格中,这样数据超出容器,用户可以轻松浏览数据。

2.1K40
  • Java Swing JTable

    1 简介 JTable用于显示和编辑常规的二维单元格表。有关面向任务的文档和使用JTable的示例,请参见Java教程中的如何使用表。...默认情况下,JTable将调整其宽度,从而不需要水平滚动条。要允许水平滚动条,请使用AUTO_RESIZE_OFF调用setAutoResizeMode(int)。...(int rowHeight) // 设置指定行的行高 void setRowHeight(int row, int rowHeight) /** 设置手动改变某,其他宽自动调整模式,...否则,在单元格上调用setValueAt将无效。 注意:该是按表视图的显示顺序指定的,而不是按TableModel的顺序指定的。...这是一个重要的区别,因为当用户重新排列表中的,视图中给定索引处的将发生变化。同时,用户的操作永远不会影响模型的顺序。 ?

    5K10

    java swing 添加 jcheckbox复选框

    而一般情况使用JTable(Vector rowData,Vector columnNames)       在Java方法中,如果参数需要传递接口,可以在调用方法传递一个(匿名)对象,该对象是一个不具名的类的实例...new ……()是构造方法,调用来构造一个匿名对象,其后的{}不是Java的特殊语法,但是Java中可以将方法定义在里面(这里的方法生命周期与匿名对象相 同),当然,此处是用于实现接口的方法。...完整的代码如下: 1 import java.awt.Component; 2 2 import java.awt.event.ActionEvent; 3 3 import java.awt.event.ActionListener...#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int) 69...必须保证该能够被编辑,否则无法更改状态 89 87 // (此步骤可以省略,省略不要忘记将设为不可编辑) 90 88 // table.getColumnModel

    3.3K00

    java winform开发之JTable全攻略

    ,而在java Swing中,它的名字叫JTable。...,然后右击,选择“表内容”就可以进行表格的行和的编辑了,不过通常情况下,表格的内容都是动态生成的,所以在控件上直接编辑它的内容的意义是不大的,当然,做DEMO比较有用。...后,只要调用JTable的setModel方法,就可以将头及数据的信息显示在表格中啦。...2)怎样添加行点击事件 首先,在JTable的设计视图中先选中JTable,然后右击,在事件的弹出菜单中依次选中"mouse-click”就可以捕捉表格的点击事件了,在这个事件监听方法中,会传入一个java.awt.event.MouseEvent...4)怎样在JTable中动态添加新行 其实这个问题非常简单,只要根据模型生成相应的行对象,然后通过调用JTable的model对象的addRow方法就ok了,由于过于简单,所以直接贴代码来说明问题:

    1.2K30

    值得练手的JavaGUI项目——色彩调节器的实现【附完整源码】

    蓝三种滑块、然后当我们拖动滑块使三种颜色的RGB值发生改变,利用ChangeListener对事件进行监听,获取到三种颜色对应的RGB值,并且在窗体中将对应得到的颜色显示出来即可。...首先是设置调色器窗体和字体,并且根据我们的需要将窗体进行简单的面板布局,在这里我们可以将窗体划分为一行三,即:第一摆放三种滑块、第二显示三种颜色的RGB值、第三显示当前得到的颜色。...,如代表红色RGB值的滑块,最小值是0,最大值是255,程序运行时滑块默认处于的位置是255。...在这里我们需要调用ChangeListener接口,该接口是ChangeEvent事件的监听接口,ChangeEvent事件在组件值改变的时候会触发,就比如说我们这里用到的滑块的值改变。...; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener

    2.4K20

    java超市仓库管理系统(超市条形码管理系统)

    图2 3、单击“添加商品”按钮,弹出如图3所示的窗体,此时必须输入所有商品信息, 否则将弹出如图4所示的对话框;商品信息输入完毕,单击“确定”按钮,实现商品的添加, 在弹出如图5所示的对话框后,释放窗体....setLocation(int x,int y) 或 对象名.setBounds(int x,int y,int Width,int Height) 注意:在使用自由布局方式布局JPanel中的控件,...4、单击“显示所有商品”、“按编号查询”及“按名称查询”按钮时调用DBManager.runSelectSql方法实现;单击“修改商品”、“删除商品”或“添加商品”按钮调用DBManager.runUpdateSql...table.getSelectedRow();//table为表格对象 获取选定行的商品名称,参考代码如下: table.getValueAt(index,1);//index为选定行的索引值 6、在编写代码,...(jTable.getValueAt(jTable.getSelectedRow(), 2).toString()); String price = jTable.getValueAt(jTable.getSelectedRow

    3.5K20

    Java JDK 环境搭建

    当我们没有配置 jdk 的环境变量,在 jdk/bin 目录外是运行不了 javac.exe (java 编译器) 和 java.exe (java 解释器) 的。...电脑如果装了多个版本的 jdk,我们只需要在 JAVA_HOME 中把需要的 jdk 目录添加进去,而不用在 path 里面加 bin 目录的路径,这样可以防止多个版本调用时的版本不确定性。...若不用 JAVA_HOME 这个名字参数名,那么这些软件需要检索 JAVA_HOME ,就需要先去手动修改相应的配置文件,才能使用这些软件,并且即便修改后也有发生故障的可能性,何必呢?...)(.jar)文件所在的位置,就如在引入一个类:import javax.swing.JTable 这句话是告诉编译器要引入 javax.swing 这个包下的 JTable 类,而 classpath...;C:\Program Files\Java\jdk,这样编译器就会到当前目录 . 和 C:\Program Files\Java\jdk\lib 去找 javax.swing.JTable 这个类。

    47020

    基于java swing的设备管理系统

    二.开发环境 开发环境:jdk          运行环境:jvm 运行平台:无限制        编辑器:eclipse 语言:java            工具:swing 数据库:mysql 三...StartFrame 负责登录、注册界面的显示 包含name、pwd文本输入框和login(regist)、exit按钮 点击login(regist)按钮,检测name、pwd中数据是否为空,如果不为空...,则将数据传递到StartDao中处理数据; regist成功,跳转入login界面 login成功,进入ManageFrame界面 点击exit按钮,系统退出 ManageFrame 框架的...InfoRepairDao、InfoRunDao、InfoScrapDao 继承自抽象类AbstractInfoDao 包含方法查询、有条件查询、无条件查询,有条件查询是在初始化获取数据库中所有对应信息时调用...,有条件查询是在输入查询条件后获取符合条件的数据集时调用 2.util工具包 ?

    2.6K81

    MySQL 之 JSON 支持(三)—— JSON 函数

    保存到的值被截断,例如在 DECIMAL(10,1) 中保存 3.14159 ,将独立于任何 ON ERROR 选项发出警告。当在一条语句中截断多个值,只会发出一次警告。...一个嵌套路径生成记录,任何同级嵌套路径表达式的都设置为 NULL。...如果参数是如前所述已更新的 JSON 值,返回一个正值,表示其二进制表示比更新前占用的空间少。...参数是 JSON ,这是在 JSON 文档插入列后,在随后可能对其执行的任何部分更新之前,用于存储 JSON 文档的空间。json_val 必须是有效的 JSON 文档或可以解析为一个的字符串。...无法部分更新,会将值直接分配给 JSON ;在这样的更新之后,JSON_STORAGE_SIZE() 始终显示用于新设置值的存储大小: mysql> UPDATE jtable mysql>

    61610

    Java 反序列化工具 gadgetinspector 初窥 (上)

    魔术方法 在上面的例子中,能看到在反序列化时没有调用Person的readobject方法,它是ObjectInputStream在反序列化对象自动调用的。...从图中可以看到AbstractTableModel$ff19274a正好实现了hashCode方法,其中又调用了f.invoke方法,f是IFn对象,并且f能通过属性__clojureFnMap获取到。...有向无环图满足以下条件: •每一个顶点出现且只出现一次 •若A在序列中排在B的前面,则在图中不存在从B到A的路径 ? 这样的图,是一个拓扑排序的图。...所以如果存在子方法调用并传递了父方法参数给子方法,需要先判断子方法返回值与子方法参数的关系。因此需要让子方法的判断在前面,这就是为什么要进行逆拓扑排序。...例如,在利用链中使用代理,任何可序列化并且是java/lang/reflect/InvocationHandler子类的invoke方法都可以视为source。

    1.5K20

    Swing的介绍

    Swing是一个为java设计的GUI工具包.Swing是JAVA基础类的一部分.Swing包括了图形用户界面(GUI)器件如 : 文本框,按钮,分隔窗格和表.Swing提供许多比AWT更好的屏幕显示元素....它们用纯Java写成,所以同Java本身一样可以跨平台运行,这一点不像AWT.它们是JFC一部分.它们支持可更换的面板和主题,然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们.这意味着你可以在任意平台上使用...,所以可以在所有平台上保持相同的运行效果,对跨平台支持比较出色.由于AWT需要调用底层平台的GUI实现,所以AWT只能使用各种平台上GUI组件的交集,这大大限制了AWT所支持的GUI组件.对Swing而言...,JTable,JSpinner,JSlider等特殊的GUI组件....MODEL-View-Controller,既模型-视图-控制器)设计模式,其中模型(Model)用于维护组件的各种状态,视图(View)是组件的可视化表现,控制器(Controller)用于控制对于各种事件,组件做出怎样的响应.模型发送改变

    1.1K20

    JSP 二讲

    这些方法将在Java程序片中被调用方法被调用时,方法内定义的变量被分配内存,调用完毕即可释放所占的内存。多个客户同时请求一个JSP页面,他们可能使用方法操作成员变量,对这种情况应给予注意。...程序片被调用执行时,这些变量被分配内存空间,所有的程序片调用完毕,这些变量即可释放所占的内存。...auotFlush属性取值false,如果out的缓冲区填满,就会出现缓存溢出异常。buffer的值是 “none”,auotFlush的值就不能设置成false。...下面例子18动态包含文件:tom.jsp,该文件被加载获取param标签中computer的值(获取computer的值由JSP的内置对象request调用getParameter方法完成)。...{   JTable table;Object a[][]; JPanel p1,p2;     Object name[]={"第1","第2"};     JButton button;JTextField

    1.1K61

    java面试大总结(3)

    对于GC来说,程序员创建对象,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。...GC确定一些对象为"不可达",GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。...引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,引用类型和原始类型用作某个类的实例数据所指定的缺省值。...散(hash)一种算法,它会从目标对象当中提取一些信息,然后生成一个表示这个对象的“相对独特”的int。...是否存在内存泄露 答:存在,一个对象引用另一对象后,另一对象为空,会出现内存泄露。

    50220

    MySQL为Null会导致5个问题,个个致命!

    有了数据之后,我们就来看中存在 NULL 值,究竟会导致哪些问题?...1.count 数据丢失 存在 NULL 值,再使用 count 查询该,就会出现数据“丢失”问题,如下 SQL 所示: select count(*),count(name) from person...从上述结果可以看出,使用的是 count(name) 查询,就丢失了两条值为 NULL 的数据丢失。 解决方案 如果某存在 NULL 值,就是用 count(*) 进行数据统计。...2.distinct 数据丢失 使用 count(distinct col1, col2) 查询,如果其中一为 NULL,那么即使另一有不同的值,那么查询的结果也会将数据丢失,如下 SQL 所示...5.增加了查询难度 值中有 NULL 值,在进行 NULL 值或者非 NULL 值的查询难度就增加了。

    1.8K20
    领券