首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置JTableHeader保持架背景色

设置JTableHeader保持架背景色
EN

Stack Overflow用户
提问于 2016-11-19 22:28:17
回答 1查看 1.7K关注 0票数 2

我的程序中有一个JTable,我想改变JTableHeader的颜色。我使用以下代码完成了此操作

代码语言:javascript
复制
JTableHeader header = table.getTableHeader();
header.setBackground(Color.WHITE);

但是,当我拖动标题时,我注意到标题后面有一个灰色区域,如下图所示。

如何将其设置为白色以使其与我的JTableHeader相匹配

MCVE

代码语言:javascript
复制
import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.JTableHeader;
import javax.swing.SwingUtilities;

@SuppressWarnings("serial")
public class JTableTest extends JFrame {
    private JTableTest()  {
        super("JTable Test");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new GridLayout(1, 1));
        createPanel();
        pack();
        setVisible(true);
    }

    JPanel panel = new JPanel(new GridLayout(1, 1));
    JScrollPane scroll = new JScrollPane();

    private void createPanel() {
        Object[] headers = {"Select", "Title", "Artist", "Length"};
        Object[][] sampleData = {{true, "Bat Outta Hell", "Meat Loaf", "673"},
                {false, "Spanish Train", "Chris De Burgh", "358"}};
        JTable table = new JTable(sampleData, headers);
        ///
        JTableHeader header = table.getTableHeader();
        header.setBackground(Color.WHITE); //Sets header white
        ///
        scroll.getViewport().add(table);
        scroll.getViewport().setBackground(Color.WHITE); //Sets table container white
        panel.add(scroll);
        panel.setBackground(Color.WHITE); //Sets scroll pane container white
        getContentPane().add(panel);
        getContentPane().setBackground(Color.WHITE); //Sets panel container white
        //What should be set to white to make header container white
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater (
            new Runnable() {
                @Override
                public void run() {
                    new JTableTest();
                }
            }
        );
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-20 21:05:14

正如我所预期的,我们需要将标题的父值设置为您想要的背景色。

但是,滚动窗格并不像我预期的那样是标题的父级。

当我添加如下代码时:

代码语言:javascript
复制
System.out.println( header.getParent() );

它显示了一个JViewport作为家长,这使我感到困惑。

然而,当我添加:

代码语言:javascript
复制
System.out.println( scroll.getViewport() );

我注意到这两个视口是不同的。因此,它显示滚动窗格的视口与标题的视口不同。

因此,解决这个问题的办法是:

代码语言:javascript
复制
JTableHeader header = table.getTableHeader();
header.setBackground(Color.GREEN); 

然后,在之后,框架是可见的,您可以这样做:

代码语言:javascript
复制
header.getParent().setBackground(Color.YELLOW);

(我用不同的颜色来显示每个语句的效果)

注在框架打包或使其可见之前,标题不会添加到滚动窗格中。如果在创建表时尝试设置背景,则在尝试访问父表时将获得NPE。

或者另一个选项是向AncestorListener添加一个JTableHeader。然后可以调用代码,然后将标头添加到可见帧中。有关这种方法,请查看在Request Focus Listener中找到的对话焦点

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40698612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档