2017-04-15 11 views
1

이미 몇 가지 예를 보았지만이 문제를 해결하는 방법을 아직 이해할 수 없었습니다. 아마도 깨끗한 해결책이 없을 것입니다. John Conway의 Game of Life를 작성하려고합니다. Jtable을 10 * 10 셀로 사용. 나는 테이블 배경색 (모든 셀 ')을 변경하는 방법을 알고 있지만, 특정 셀 색상 변경에 대해 수행 할 수 없습니다.Java - Jtable - 다른 색상의 셀

public class theGame { 

    public static void main(String [] args) { 

     theMatrix gui = new theMatrix(); 

     gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     gui.setSize(550,450); 
     gui.setVisible(true); 
     gui.setTitle("Game Of Life"); 



     JOptionPane.showMessageDialog(null, " Welcome John Conway's Game Of Life "); 
     int replay = JOptionPane.showConfirmDialog(null, "Would you like to see the next generation?", "Close?", JOptionPane.YES_NO_OPTION); 

     if (replay == JOptionPane.YES_OPTION); 

    } 
} 
다음
public class theMatrix extends JFrame { 

    JTable table; 

    public theMatrix() { 
     setLayout(new FlowLayout()); 
     String[] columNames = {"", "", "", "", "", "", "", "", "", ""}; 

     Object[][] data = { // Create a 10*10 table with default values. 

      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null} 
     } 

     table = new JTable(data, columNames); 
     table.setPreferredScrollableViewportSize(new Dimension(500, 500)); 
     table.setRowHeight(40); 
     table.setBackground(Color.lightGray); 

     JScrollPane scrollPane = new JScrollPane(table); 
     add(scrollPane); 

    } 
} 
+1

[개념 : 편집자 및 렌더러] (http://docs.oracle.com/javase/tutorial/uiswi ng/components/table.html # editrender) 및 [사용자 정의 렌더러 사용] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer) – MadProgrammer

+1

셀 렌더러는 특정 셀이 어떻게 렌더링되어야하는지에 대한 결정을 내릴 것입니다. – MadProgrammer

+0

확실히, 저는 테이블을 0,1로 바꿀 것이고 게임이 다른 타입으로 착색하려고 시도 할 것입니다. – Itsko

답변

1

는 예입니다 : 여기

내 코드입니다 .. 난 내가의 CellRenderer를 가진 클래스를 생성 할 필요가 알고 있지만, 나는 너무 이해하기 위해 관리 할 수 렌더링 된 사용자 정의 셀의 경우 행과 열을 기반으로 배경색이 변경됩니다.

public class TheMatrix extends JFrame { 

    JTable table; 

    public TheMatrix() { 
     setLayout(new FlowLayout()); 
     String[] columNames = {"", "", "", "", "", "", "", "", "", ""}; 

     Object[][] data = { // Create a 10*10 table with default values. 

      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null}, 
      {null, null, null, null, null, null, null, null, null, null} 
     }; 

     table = new JTable(data, columNames); 
     table.setPreferredScrollableViewportSize(new Dimension(500, 500)); 
     table.setRowHeight(40); 
     table.setDefaultRenderer(Object.class, new MyRenderer()); 

     JScrollPane scrollPane = new JScrollPane(table); 
     add(scrollPane); 
    } 
} 

class MyRenderer implements TableCellRenderer { 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, 
            boolean hasFocus, int row, int col) { 
     JTextField cell = new JTextField(); 

     cell.setBackground(((row % 2) == 0) && ((col % 2) == 0) ? Color.WHITE : Color.BLACK); 
     return cell; 
     } 
}