【问题标题】:JScrollPane - how does it display JTable headers?JScrollPane - 它如何显示 JTable 标题?
【发布时间】:2016-09-24 21:24:59
【问题描述】:

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

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

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

【问题讨论】:

    标签: java swing jtable jscrollpane


    【解决方案1】:

    JTable 负责执行此操作。

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

    所以JTable 实现检查表的父级是否为JViewport。如果是这样,它会使用setColumnHeaderView(...) 方法将表头添加到滚动窗格中。

    【讨论】:

    • 是否有任何解释为什么调用 setColumnHeaderView 不会更新滚动窗格的列标题?在我实例化滚动窗格、使用 setViewportView 添加 JTable 并将滚动窗格添加到 JPanel 之后调用它。我试过在不同的组件上重新绘制或重新验证,没有结果。在创建另一个表并从中提取表头后,我将它传递给 setColumnHeaderView。不用找了。但是,当我在 setColumnHeaderView 之后调用 setViewportView(null) 时,滚动窗格会显示第二个表的标题。
    • @user4205580,您可以在框架可见后更改滚动窗格的列标题,而不是之前。因为如上所述,当框架可见时,表格会设置列标题。如果您有问题,请发布SSCCE 来演示问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    相关资源
    最近更新 更多