【问题标题】:How to make the header of a JTable transparent如何使 JTable 的表头透明
【发布时间】:2011-07-23 05:24:27
【问题描述】:

我想创建一个透明的 JTable。表格本身并没有造成太大的问题,我已经实现了 TableModel 和 TableCellRenderer,并在 JTable、封闭的 JScrollPane 和 JScrollPane 的 ViewPort 上设置了 setOpaque(false)。

表格现在可以正确地绘制标题,因为它位于 JScrollPane 中,因此我设置了自己的 TableCellRenderer 以使用 getTableHeader().setDefaultRenderer(new TaskTableHeaderRenderer()); 呈现标题。我也希望它是透明的,只是使用 JLabel 的文本。但尽我所能,我无法得到它。 Renderer 确实提供了一个透明组件(我什至尝试只使用带有 setOpaque(false) 的 JPanel),甚至尝试在 JTableHeader 上设置 setOpaque(false) 并为所有相关组件设置透明背景颜色。似乎没有任何帮助。

我使用的 LookAndFeel 是 JGoodies 的 PlasticXPLookAndFeel,但我尝试了 Metal 和 Windows Look & Feel 实现也无济于事。此外,调试表明 PlasticXPLookAndFeel 使用 BasicTableHeaderUI 而不对其进行子类化。

那么如何实现透明表头呢?

【问题讨论】:

    标签: java swing jtable


    【解决方案1】:
    Table.getTableHeader().setOpaque(false);
    Table.getTableHeader().setBackground(new Color(0,0,0,0.6f));
    Table.getTableHeader().setForeground(Color.white);
    

    【讨论】:

      【解决方案2】:

      你可以先创建一个cellRenderer

      public class OpaqueHeader extends DefaultTableCellRenderer {
      
          @Override
          public Component getTableCellRendererComponent(JTable arg0, Object ob,
                  boolean arg2, boolean arg3, int arg4, int arg5) {
              JLabel t = new JLabel(ob.toString());
              t.setOpaque(false);
              t.setForeground(Color.black);
              return t;
          }
      }
      

      在你的 JTable 对象之后

      table.getTableHeader().setDefaultRenderer(new OpaqueHeader());
      

      【讨论】:

      • 好吧,正如问题中实际提到的那样,我已经这样做了,但这无济于事。我已经更新了问题以更直接地提及这一事实。您是否验证了您的解决方案?
      • 这将删除表格标题的一些有用功能,例如呈现排序图标
      【解决方案3】:

      也许会覆盖paintBackground()并使其不调用super.paintBackground()?

      【讨论】:

      • 嗯,你说的是哪个“paintBackground”方法?我检查了整个继承树,但似乎没有一个类具有该名称的方法。
      • 基本上你有 3 个方法:paintBorder()、paintComponent() 和 paintChildren()。 [对不起paintBackground(),内存对我有帮助]尝试使用代表表头的组件的paintComponent / paintBorder ...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      相关资源
      最近更新 更多