2017-04-15 63 views
1

我已經看到一些例子,但還是沒能明白如何來解決這個問題,還沒有一個乾淨的解決方案可能.. 我試圖通過建立約翰·康威的生命遊戲中使用10 * 10的Jtable作爲單元格。我知道如何更改表格的背景顏色(所有細胞的),但我不能爲特定的單元格顏色變化做到這一點。我知道,我需要創建的CellRenderer類,但我不能設法瞭解它太..爪哇 - 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納克/組件/ table.html#editrender)和[使用定製渲染器(http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer) – MadProgrammer

+1

單元格渲染器應使用所述數據特定的細胞,使關於應該如何呈現 – MadProgrammer

+0

是的肯定,我會改變我的表0,1確定,然後會嘗試有色它們在不同類型的遊戲應該是... – Itsko

回答

1

下面是一個例子用於呈現的定製的細胞,根據行和列,其改變背景顏色:

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