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