Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > JTable заголовки строк и столбцов


Автор: LSD 22.11.2006, 23:04
По умолчанию компонент JTable отображает заголовок только для колонок. Иногда возникает необходимость изменить это поведение, скрыть заголовок для столбцов, показать заголовок для строк и т.п.

За отображение заголовков отвечает не сам JTable, а JScrollPane соответвенно и работать надо с ним. Чтобы установить вертикальный/горизонтальный загловок надо вызвать setRowHeaderView()/setColumnHeaderView() соответсвенно. Чтобы удалить его нужно вызвать setColumnHeaderView(null), только вызывать его надо после того как компонент будет отображен на экране.

Спасибо http://vingrad.ru/@Goliath за предоставленый пример.
Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

public class RowHeaderRenderer extends JLabel implements ListCellRenderer 
{
    RowHeaderRenderer(JTable table) 
    {
        JTableHeader header = table.getTableHeader();
        setOpaque(true);
        setBorder(UIManager.getBorder("TableHeader.cellBorder"));
        setHorizontalAlignment(CENTER);
        setForeground(header.getForeground());
        setBackground(header.getBackground());
        setFont(header.getFont());
    }
  
    public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) 
    {
        setText((value == null) ? "" : value.toString());    
        return this;
    }
}

Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

public class RowHeaderExample extends JFrame 
{
    JScrollPane scroll;
    public RowHeaderExample() 
    {
        super( "Row Header Example" );
        setSize( 300, 150 );
        
        ListModel lm = new AbstractListModel() 
        {
            String headers[] = {"a1", "b", "c", "d", "e", "f", "g", "h", "i"};
            public int getSize() 
            {return headers.length;}
            
            public Object getElementAt(int index) 
            {
                return headers[index];
            }
        };

        DefaultTableModel dm = new DefaultTableModel(lm.getSize(),10);
        JTable table = new JTable(dm);
    
        JList rowHeader = new JList(lm);    
        rowHeader.setFixedCellWidth(50);
    
        rowHeader.setCellRenderer(new RowHeaderRenderer(table));

        scroll = new JScrollPane(table);
        
        scroll.setRowHeaderView(rowHeader);
        getContentPane().add(scroll, BorderLayout.CENTER);
    }
    
    public JScrollPane getScroll()
    {
        return scroll;
    }

    public static void main(String[] args) 
    {
        RowHeaderExample frame = new RowHeaderExample();
        frame.addWindowListener( new WindowAdapter() 
                    {
                        public void windowClosing( WindowEvent e ) 
                        {
                            System.exit(0);
                        }
                    });
        frame.setVisible(true);
        frame.getScroll().setColumnHeaderView(null);
        
    }
}



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)