JTable, with line-lettering
Sometimes you want to have a lettering for the lines of a table, as it is usual by table calculationsn. This can be achieved through a further list at the left, next to the table.
package com.sowas.javawiki.rowheadertable; import java.awt.BorderLayout; import java.awt.Component; import javax.swing.AbstractListModel; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListCellRenderer; import javax.swing.ListModel; import javax.swing.UIManager; import javax.swing.table.DefaultTableModel; import javax.swing.table.JTableHeader; public class RowHeaderTable extends JFrame { public RowHeaderTable(){ super("Row Header Table"); ListModel lm = new RowHeaderListModel(); DefaultTableModel dtm = new DefaultTableModel(lm.getSize(), 4); JTable table = new JTable(dtm); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); JList rowHeader = new JList(lm); rowHeader.setFixedCellWidth(30); rowHeader.setFixedCellHeight(table.getRowHeight()); rowHeader.setCellRenderer(new RowHeaderRenderer(table)); JScrollPane scroll = new JScrollPane(table); scroll.setRowHeaderView(rowHeader); getContentPane().add(scroll, BorderLayout.CENTER); } public static void main(String[] args){ RowHeaderTable frame = new RowHeaderTable(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } class RowHeaderListModel extends AbstractListModel{ String strRowHeaders[] = {"1", "2", "3", "4", "5", "6", "7"}; public int getSize(){ return strRowHeaders.length; } public Object getElementAt(int index){ return strRowHeaders[index]; } } class RowHeaderRenderer extends JLabel implements ListCellRenderer{ RowHeaderRenderer(JTable table){ JTableHeader tableHeader = table.getTableHeader(); setBorder(UIManager.getBorder("TableHeader.cellBorder")); setHorizontalAlignment(CENTER); setForeground(tableHeader.getForeground()); setOpaque(true); // Damit der Hintergrund nicht verändert wird setFont(tableHeader.getFont()); } public Component getListCellRendererComponent(JList list, Object value, int index, boolean fSelected, boolean fCellHasFocus){ setText((value == zero) ? "" : value.toString()); return this; } }