0

AbstractTableModelいつものように、列名に String[] 、行の内容に Object[][] を使用 して、単純なカスタム テーブルを作成するために使用しています。JTable'sしかし、追加の行 (の列名の前に、一般的なタイトルのすべての列にまたがる 1 つの大きなセル)。誰にもアイデアはありますか?

4

2 に答える 2

1

BorderLayoutを使用するTableHeaderと、Container

add(table, BorderLayout.CENTER);
add(header, BorderLayout.SOUTH);
于 2011-07-16T22:52:09.933 に答える
1

それは、一般的なタイトルをどのように見せたいかによって異なります。

別のパネルでテーブルの上に 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);

タイトルを実際に列ヘッダーの一部にしたい場合は、少しトリッキーです。これを行う 1 つの方法は、次のようなものです。

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 );
于 2011-07-17T03:16:42.163 に答える