Java JScrollPane-它如何显示JTable标题?

Java JScrollPane-它如何显示JTable标题?,java,swing,jtable,jscrollpane,Java,Swing,Jtable,Jscrollpane,JScrollPane代码的哪一部分负责显示JTable的列标题 如果只是将JTable添加到JPanel中,默认情况下它不会显示头。您应该将该表传递给JScrollPane的构造函数,或者使用该表作为参数调用JScrollPanesetViewportView。那么实际上,是什么让列标题可见呢?它是JScrollPane内部呈现的一部分(updateUI和getUI方法) 最初我认为JScrollPane使用它的setColumnHeaderView来完成这项工作,但它没有(将null传递给此

JScrollPane代码的哪一部分负责显示JTable的列标题

如果只是将JTable添加到JPanel中,默认情况下它不会显示头。您应该将该表传递给JScrollPane的构造函数,或者使用该表作为参数调用JScrollPane
setViewportView
。那么实际上,是什么让列标题可见呢?它是JScrollPane内部呈现的一部分(
updateUI
getUI
方法)


最初我认为JScrollPane使用它的
setColumnHeaderView
来完成这项工作,但它没有(将null传递给此方法,表仍将显示标题)。

JTable
负责完成这项工作

JTable
addNotify()
方法被覆盖。基本上,当一个组件被添加到一个可见的容器中时,就会调用这个方法


因此
JTable
实现检查表的父对象是否是
JViewport
。如果是这样,它会使用
setColumnHeaderView(…)
方法将表格标题添加到滚动窗格。

是否有任何解释说明为什么调用setColumnHeaderView不会更新滚动窗格的列标题?在我实例化滚动窗格、使用setViewportView添加JTable并将滚动窗格添加到JPanel之后,会调用它。我试过在不同的组件上重新喷漆或重新验证,没有结果。创建另一个表并从中提取表头后,我将其传递给setColumnHeaderView。没有变化。但是,当我在setColumnHeaderView之后调用setViewportView(null)时,滚动窗格将显示第二个表的标题。@user4205580,您可以在框架可见之后而不是之前更改滚动窗格的列标题。因为如我上面所解释的,当框架可见时,表设置了列标题。如果您有问题,请发布一个演示该问题的帖子。