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; } }