Code
class RowHeaderList extends JList {
private final JTable table;
private final ListSelectionModel tableSelection;
private final ListSelectionModel rListSelection;
public RowHeaderList(ListModel model, JTable table) {
super(model);
this.table = table;
setFixedCellHeight(table.getRowHeight());
setCellRenderer(new RowHeaderRenderer(table.getTableHeader()));
RollOverListener rol = new RollOverListener();
addMouseListener(rol);
addMouseMotionListener(rol);
tableSelection = table.getSelectionModel();
rListSelection = getSelectionModel();
}
class RowHeaderRenderer extends JLabel implements ListCellRenderer {
private final JTableHeader header;
public RowHeaderRenderer(JTableHeader header) {
this.header = header;
this.setOpaque(true);
this.setBorder(BorderFactory.createMatteBorder(0,0,1,2,Color.GRAY));
this.setHorizontalAlignment(CENTER);
this.setForeground(header.getForeground());
this.setBackground(header.getBackground());
this.setFont(header.getFont());
}
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
if(index==pressedRowIndex) {
setBackground(Color.GRAY);
}else if(index==rollOverRowIndex) {
setBackground(Color.WHITE);
}else if(isSelected) {
setBackground(Color.GRAY.brighter());
}else{
setForeground(header.getForeground());
setBackground(header.getBackground());
}
setText((value==null)?"":value.toString());
return this;
}
}
}
References