Coloring JTable cells

xware

New Member
I am having trouble coloring my JTable cells. I am making a tetris game. All the functionality of the game works; button presses, keyboard interaction to move pieces, removing complete rows, etc. The output that occurs now is simply table integer values printing out (see screenshot). These integer values refer to a color. I have the code to change the color of the cells based on said integer value in the MyRenderer class below but no coloring happens. I was wondering if there is some "rerender" method I am just not finding or do I need to build my own paint method to call?Any suggestions?\[code\] startGame.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { card3.remove(0); // Removes button model = new MyTableModel(); table = new JTable(model); table.setDefaultRenderer(int.class, new MyRenderer()); table.setRowHeight(GRID_ROW_HEIGHT); table.setFocusable(false); table.setRowSelectionAllowed(true); for (int i = 0; i < NUM_COLS; i++) { table.getColumnModel().getColumn(i) .setPreferredWidth(table.getRowHeight()); } card3.add(table); JButton pauseButton = new JButton("Pause"); card3.add(pauseButton); pauseButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { game.pause(); } }); card3.setFocusable(true); card3.requestFocusInWindow(); KeyListener kl = new KeyListener() { public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { if (e.getKeyChar() == 'a' || e.getKeyChar() == 'A') { game.move_Left(); draw_grid_first_time(); card3.revalidate(); } else if (e.getKeyChar() == 'd' || e.getKeyChar() == 'D') { game.move_Right(); draw_grid_first_time(); card3.revalidate(); } else if (e.getKeyChar() == 'q' || e.getKeyChar() == 'Q') { game.rotate_left(); draw_grid_first_time(); card3.revalidate(); } else if (e.getKeyChar() == 'e' || e.getKeyChar() == 'E') { game.rotate_right(); draw_grid_first_time(); card3.revalidate(); } else if (e.getKeyChar() == ' ') { game.pause(); } } }; card3.addKeyListener(kl); draw_grid_first_time(); card3.revalidate(); // Redraws graphics Timer timer = new Timer(500, new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { if (!game.getPause()) { game.move_Down(); draw_grid(); card3.revalidate(); // Redraws graphics } } public void draw_grid() { for (int i = 0; i < game.getNumRows(); i++) { for (int j = 0; j < game.getNumCols(); j++) { int[][] grid = game.getGrid(); model.setValueAt(grid[j], i, j); } } } }); timer.setRepeats(true); timer.setCoalesce(true); timer.start(); if (game.isOver()) { timer.stop(); } } }); // Sets up layout cards = new JPanel(new CardLayout()); cards.add(card1, SPLASHSCREEN); cards.add(card2, MAINMENU); cards.add(card3, TETRIS); // Creates the actual window pane.add(cards, BorderLayout.CENTER);}public void draw_grid_first_time() { for (int i = 0; i < game.getNumRows(); i++) { for (int j = 0; j < game.getNumCols(); j++) { int[][] grid = game.getGrid(); model.setValueAt(grid[j], i, j); } }} // Render each cell as a background color dependent on grid from tetris gameclass MyRenderer implements TableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JTextField editor = new JTextField(); if (value != null) { editor.setText(value.toString()); } if ((Integer) table.getValueAt(row, column) == 0) { editor.setBackground(Color.DARK_GRAY); } else if ((Integer) table.getValueAt(row, column) == 1) { editor.setBackground(Color.RED); } else if ((Integer) table.getValueAt(row, column) == 2) { editor.setBackground(Color.GREEN); } else if ((Integer) table.getValueAt(row, column) == 3) { editor.setBackground(Color.BLUE); } else if ((Integer) table.getValueAt(row, column) == 4) { editor.setBackground(Color.YELLOW); } return editor; }}// Overwrite the Table Model to be what I want color wise@SuppressWarnings("serial")class MyTableModel extends AbstractTableModel { private int[][] values = new int[NUM_COLS][NUM_ROWS]; public int getColumnCount() { return NUM_COLS; } public int getRowCount() { return NUM_ROWS; } public Object getValueAt(int row, int col) { return values[col][row]; } public void setValueAt(Object val, int row, int col) { values[col][19 - row] = (Integer) val; fireTableCellUpdated(row, col); }}\[/code\]
KxTQg.png
 
Back
Top