JScrollPane - 它如何显示 JTable headers?

JScrollPane - how does it display JTable headers?

JScrollPane代码的哪一部分负责显示JTable的headers列?

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

最初我认为 JScrollPane 使用它的 setColumnHeaderView 来完成这个,但它没有(将 null 传递给此方法,table 仍然会显示 headers)。

JTable负责做这件事。

JTableaddNotify() 方法被覆盖。基本上当组件被添加到可见容器时调用此方法。

因此 JTable 实现检查 table 的 parent 是否为 JViewport。如果是这样,它将使用 setColumnHeaderView(...) 方法将 table header 添加到滚动窗格。