如何使JTable的标题透明

时间:2011-03-25 20:59:06

标签: java swing jtable

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

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

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

那么如何实现透明表头?

3 个答案:

答案 0 :(得分:3)

Table.getTableHeader().setOpaque(false);
Table.getTableHeader().setBackground(new Color(0,0,0,0.6f));
Table.getTableHeader().setForeground(Color.white);

答案 1 :(得分: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());

答案 2 :(得分:-1)

可能覆盖paintBackground()并使其不能调用super.paintBackground()?