Swing/JTable CellRenderer

JTable CellRenderer example

Soul-Learner 2016. 9. 2. 14:30

JTable의 셀에 마우스가 올라갈 때의 색상 변경하기


JTable을 사용할 때 마우스가 테이블의 특정 라인 위에 위치하면 해당 라인의 셀 배경색상이 변경되고 마우스가 내려가면 원래 색상으로 되돌아오는 예제

MouseMotionListener를 이용하여 마우스가 위치한 행의 번호를 얻을 수 있고, 이 때 TableCellRenderer를 이용하여 해당 셀의 배경색상을 변경하도록 했다


table.addMouseMotionListener(new MouseMotionAdapter(){
	public void mouseMoved(MouseEvent e)
	{
		int row = table.rowAtPoint(e.getPoint());
		if (row > -1)
		 {
		    cellRenderer.rowAtMouse = row;
		    cellRenderer.color = Color.GREEN;
		    table.repaint();
		 }
	 }
});
cellRenderer = new MyRenderer();
table.getColumnModel().getColumn(1).setCellRenderer(cellRenderer);
table.getColumnModel().getColumn(2).setCellRenderer(cellRenderer);
table.getColumnModel().getColumn(3).setCellRenderer(cellRenderer);	



public class MyRenderer extends DefaultTableCellRenderer  
{ 
	Color color;
	int rowAtMouse;
		
	@Override
	public Component getTableCellRendererComponent(JTable table, Object value, boolean   isSelected, boolean hasFocus, int row, int column) 
	{ 
	        Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
	        if (! table.isRowSelected(row)) //현재 선택된 행의 색상은 변경하지 않고 선택 해제된 경우에만 배경색상을 변경한다
	        {
	        	if(row==rowAtMouse) c.setBackground(color);
	        	else c.setBackground(Color.WHITE);
	        }
	        return c;
	} 
}