По умолчанию компонент 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); } } |
|