如何在 Java 中构建自定义 JTable,并在列名称上方添加一行

发布于 2024-11-24 00:08:59 字数 154 浏览 6 评论 0原文

我正在使用 AbstractTableModel 创建一个简单的自定义表,与往常一样,使用 String[] 作为列名,使用 Object[][] 作为 JTable's rows 中的内容。但是,我发现很难创建一个在列名称之前包含附加行(跨越通用标题的所有列的一个大单元格)的表。有人知道吗?

I am using AbstractTableModel to create a simple custom table,as usual with a String[] for the column names and Object[][] for the contents in the JTable's rows .But, I found it hard to create a table containing an additional row (of one big cell spanning all columns for a general title) before the column names. Does anyone have any idea?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

剑心龙吟 2024-12-01 00:08:59

通过使用 BorderLayout 您可以放置​​ TableHeaderContainer 的底部

add(table, BorderLayout.CENTER);
add(header, BorderLayout.SOUTH);

by using BorderLayout you can place TableHeader to the bottom of the Container

add(table, BorderLayout.CENTER);
add(header, BorderLayout.SOUTH);
七秒鱼° 2024-12-01 00:08:59

这取决于您希望您的总标题是什么样子。

您可以轻松地在单独的面板中的表格上方添加 JLabel。类似于:

JPanel tablePanel = new JPanel( new BorderLayout() );
JLabel label = new JLabel( "Table Title" );
label.setHorizontalAlignment( JLabel.CENTER );
tablePanel.add(label, BorderLayout.NORTH);
JTable table = new JTable(...);
JScrollPane scrollPane = new JScrollPane( table );
tablePanel.add(scrollPane, BorderLayout.CENTER);

如果您希望标题实际上成为列标题的一部分,那么这就有点棘手了。一种方法是这样的:

JTable table = new JTable(...)
{
    @Override
    protected void configureEnclosingScrollPane()
    {
        super.configureEnclosingScrollPane();

        Container parent = getParent();

        if (parent instanceof JViewport)
        {
            parent = parent.getParent();

            if (parent instanceof JScrollPane)
            {
                JScrollPane scrollPane = (JScrollPane)parent;

                JPanel columnHeader = new JPanel( new BorderLayout() );
                JLabel label = new JLabel( "Table Title" );
                label.setHorizontalAlignment( JLabel.CENTER );
                columnHeader.add(label, BorderLayout.NORTH);
                columnHeader.add(getTableHeader(), BorderLayout.CENTER);
                scrollPane.setColumnHeaderView( columnHeader );
            }
        }
    }
};
JScrollPane scrollPane = new JScrollPane( table );
add( scrollPane );

It depends what you want your general title to look like.

You can easily add a JLabel above the table in a separate panel. Something like:

JPanel tablePanel = new JPanel( new BorderLayout() );
JLabel label = new JLabel( "Table Title" );
label.setHorizontalAlignment( JLabel.CENTER );
tablePanel.add(label, BorderLayout.NORTH);
JTable table = new JTable(...);
JScrollPane scrollPane = new JScrollPane( table );
tablePanel.add(scrollPane, BorderLayout.CENTER);

If you want the title to actually be a part of the column header then it is a little trickier. One way to do this is something like:

JTable table = new JTable(...)
{
    @Override
    protected void configureEnclosingScrollPane()
    {
        super.configureEnclosingScrollPane();

        Container parent = getParent();

        if (parent instanceof JViewport)
        {
            parent = parent.getParent();

            if (parent instanceof JScrollPane)
            {
                JScrollPane scrollPane = (JScrollPane)parent;

                JPanel columnHeader = new JPanel( new BorderLayout() );
                JLabel label = new JLabel( "Table Title" );
                label.setHorizontalAlignment( JLabel.CENTER );
                columnHeader.add(label, BorderLayout.NORTH);
                columnHeader.add(getTableHeader(), BorderLayout.CENTER);
                scrollPane.setColumnHeaderView( columnHeader );
            }
        }
    }
};
JScrollPane scrollPane = new JScrollPane( table );
add( scrollPane );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文