Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使JTable的标头透明_Java_Swing_Jtable - Fatal编程技术网

Java 如何使JTable的标头透明

Java 如何使JTable的标头透明,java,swing,jtable,Java,Swing,Jtable,我想创建一个透明的JTable。表本身并没有带来太多问题,我已经实现了TableModel和TableCellRenderer,并在JTable、封闭的JScrollPane和JScrollPane的视口上设置了set不透明(false) 该表现在可以正确地绘制标题,因为它位于JScrollPane中,所以我使用getTableHeader().setDefaultRenderer(新TaskTableHeaderRenderer())设置自己的TableCellRenderer来呈现标题。我希

我想创建一个透明的JTable。表本身并没有带来太多问题,我已经实现了TableModel和TableCellRenderer,并在JTable、封闭的JScrollPane和JScrollPane的视口上设置了set不透明(false)

该表现在可以正确地绘制标题,因为它位于JScrollPane中,所以我使用
getTableHeader().setDefaultRenderer(新TaskTableHeaderRenderer())设置自己的TableCellRenderer来呈现标题。我希望这也是透明的,只是使用JLabel的文本。尽管我尽力了,我还是弄不到。渲染器确实提供了一个透明组件(我甚至尝试只使用一个带有setOpaque(false)的JPanel),我甚至尝试在JTableHeader上设置setOpaque(false),并为所有相关组件设置透明背景色。似乎没有什么帮助

我使用的LookAndFeel是JGoodies的PlasticXPLookAndFeel,但我尝试了Metal和Windows的Look&Feel实现,但也没有效果。此外,调试表明PlasticXPLookAndFeel使用BasicTableHeaderUI,而没有将其子类化


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

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

您可以先创建一个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());

好吧,正如问题中提到的,我已经这样做了,但这没有帮助。我更新了问题,更直接地提到了这一事实。您是否验证了您的解决方案?这将删除表头的一些有用功能,例如呈现排序iconsUm,您所说的是哪种“paintBackground”方法?我检查了整个继承树,但没有一个类似乎有一个同名的方法。基本上,你有3个方法:paintBorder()、paintComponent()和paintChildren()。[对不起,paintBackground(),内存错误]请尝试使用表示表头的组件的paintComponent/paintBorder。。。
Table.getTableHeader().setOpaque(false);
Table.getTableHeader().setBackground(new Color(0,0,0,0.6f));
Table.getTableHeader().setForeground(Color.white);