Swing/JTable 09
JTable Cell Renderer example
Soul-Learner
2014. 6. 19. 18:59
자바에서 테이블(JTable)을 사용할 때 각 셀이나 행의 색상을 변경하는 예
특정 컬럼에 특정 값을 가진 행을 찾아서 행의 색상을 변경하는 예
TableCellRendererTest.java
import javax.swing.*; import javax.swing.table.DefaultTableModel; public class TableCellRendererTest { public static void main(String[] args) { String[][] data = getTableData(); String[] cols = getTableCols(); JFrame frame = new JFrame("Table Cell Renderer Test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); DefaultTableModel tm = new DefaultTableModel(data, cols); JTable table = new JTable(tm); MyRenderer myRenderer = new MyRenderer(); // JTable의 헤더가 보이지 않을 때는 JTable을 다른 컨테이너에 포함시키면 보이게 된다 table.setDefaultRenderer(Object.class, myRenderer); // 자료형이 Object 형인 컬럼에만 색상을 적용함 // AbstractTableModel 클래스의 getColumnClass() 가 Object.class 를 리턴하는 컬럼만 색상이 변경됨 JScrollPane scroll = new JScrollPane(table); frame.getContentPane().add(scroll); frame.pack(); frame.setVisible(true); } public static String[] getTableCols() { String []cols = { "A", "B", "C", "D" }; return cols; } public static String[][] getTableData() { String[][] data = { { "1-1", "1-2", "1-3", "1-4" }, { "2-1", "2-2", "2-3", "2-4" }, { "3-1", "3-2", "3-3", "3-4" } }; return data; } }
MyRenderer.java
import java.awt.*; import javax.swing.*; import javax.swing.table.*; public class MyRenderer extends DefaultTableCellRenderer { @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(table.getValueAt(row, 1).toString().indexOf("3")!=-1) { // 특정한 값을 가진 셀을 찾아서 그 셀만 배경색상을 변경한다 c.setBackground(Color.lightGray); }else{ c.setBackground(Color.white); } } return c; } }