2017-12-17 12 views
0

私はスイングでゲームのインターフェースを実装しています。このゲームにはjtableで表されるボードがあります。 >緑色 2 - - >赤 等 1:私はこのように、代わりに数字の「O」着色テーブルショーをしたいと思いprepareRendererのJavaスイングの問題

0〜6

各セルは番号を持っています... 私はこれを実装している:

public class DTable extends JTable{ 
@Override 
public Component prepareRenderer(TableCellRenderer renderer, int rowIndex, int columnIndex){ 
    Component component = super.prepareRenderer(renderer, rowIndex, columnIndex); 
    component.setBackground(Color.WHITE); 

    component.setForeground(Color.BLACK); 
    if ((getValueAt(rowIndex, columnIndex) != null)){ 

     String val = (String) getValueAt(rowIndex, columnIndex); 
     setValueAt("O", rowIndex, columnIndex); 
     System.out.println("el valor de val es "+val); 

     if ("0".equals(val)){ 
      Color col = new Color(255,255,255); 
      component.setForeground(col); 
     } 
     else if ("1".equals(val)){ 
      Color col = new Color(255,114,145); 
      component.setForeground(col); 
     } 
     else if ("2".equals(val)){ 
      Color col = new Color(255,0,0); 
      component.setForeground(col); 

     } 
     else if ("3".equals(val)){ 
      Color col = new Color(52,146,153); 
      component.setForeground(col); 

     } 
     else if ("4".equals(val)){ 
      Color col = new Color(0,3,204); 
      component.setForeground(col); 

     } 
     else if ("5".equals(val)){ 
      Color col = new Color(191,206,20); 
      component.setForeground(col); 

     } 
     else if ("6".equals(val)){ 
      Color col = new Color(20,206,98); 
      component.setForeground(col); 

     } 
     System.out.println("que pasa aqui"); 

    } 

    return component; 
} 

問題は、それが細胞にすべての黒「O」を置くことです。 "val"の値を表示しようとすると、最初の行は0と6の間の数値を返しますが、それは常に "O"を表示します。

ここでの問題は、私がprepareRendererを正しく使用していないことですが、私は本当に分かりません。 また、このメソッドを使用すべきではないと思われる場合は、セルの数値を "O"に変更する方法についての提案があります。 ありがとう!

+0

:デフォルトのレンダラを使用すると、のような何かを行うことができますので、JLabelのです)。 –

答えて

1

問題は、TableModelのデータを変更することです。データが変更されると、テーブルが再描画され、prepearRenderer(...)メソッドがもう一度呼び出され、今回はセルの値が「0」になるようにする必要があります。

モデルのデータを変更しないでください。その声明を取り除く。

代わりに、レンダラーのデータを変更することができます。 [MCVE]または[ショート、自炊、正しい例](http://www.sscce.org/を投稿し、早いほど良いのヘルプについて

//Component component = super.prepareRenderer(renderer, rowIndex, columnIndex); 
JLabel renderer = (JLabel)super.prepareRenderer(renderer, rowIndex, columnIndex); 
renderer.setText("0");