カスタムレンダラーを使用して、個々のセルの背景を指定の画像に設定しようとしています。この場合、私はチェス盤の木製の四角形を与えています。ここでJTableセルのアイコンが誤って表示される
は、それが前のようになります。
ここでは、その後、次のようになります。
EDIT:少しの実験では、それはすべての正方形のようです木のアイコンが与えられます。作品はまだ、この結果として、移動することができます。私のコードでは
を(私は2つの以上のリンクを投稿することができないため、コメントに入れて)、私は単にsetIcon(wood)
でsetBackground(darkSquare)
を交換しました。
@SuppressWarnings("serial")
public class BoardCellRenderer extends DefaultTableCellRenderer {
private ArrayList<Coordinate> possibleMoves = new ArrayList<Coordinate>();
private ImageIcon wood = new ImageIcon("resources/images/light_square.png");
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setHorizontalAlignment(SwingConstants.CENTER);
Color darkSquare = new Color(125, 125, 125);
//pattern for the chessboard look
if(row % 2 == 0 && column % 2 == 1)
setBackground(darkSquare);
//setIcon(wood);
else if(row % 2 == 1 && column % 2 == 0)
setBackground(darkSquare);
//setIcon(wood);
else
setBackground(Color.WHITE);
for(Coordinate move : possibleMoves)
if(column == move.getX() && row == move.getY()){
setBackground(new Color(255, 51, 51, 50));
System.out.println("Highlighting (" + row + ", " + column + ")");
}
if(hasFocus){
setBorder(new MatteBorder(2, 2, 2, 2, Color.RED));
System.out.println("hasFocus [array]: " + row + ", " + column);
System.out.println("hasFocus [coordinate]: " + column + ", " + row);
}
if(isSelected)
setBorder(new MatteBorder(2, 2, 2, 2, Color.BLUE));
return this;
}
public void setPossibleMoves(ArrayList<Coordinate> possibleMoves){
this.possibleMoves = possibleMoves;
}
}
http://i.stack.imgur.com/ZZw7r.jpg – user5705019
このジョブにレンダラーを使用しないで、アイコン/ ImageIconをXxxTableModelに格納し、次にXxxRendererがモデルおよびバックグラウンドから画像をペイントする必要がありますチェス盤の – mKorbel