gpt4 book ai didi

Java swing与prepareRenderer的问题

转载 作者:行者123 更新时间:2023-12-02 11:51:26 25 4
gpt4 key购买 nike

我正在实现 Swing 游戏的界面。该游戏有一个由 jtable 表示的棋盘。

每个单元格都有一个 0 到 6 之间的数字。

我想让表格显示彩色“O”而不是数字,如下所示:1 -> 绿色2 -> 红色ETC...我已经实现了这个:

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”的建议。谢谢!

最佳答案

setValueAt("O", rowIndex, columnIndex);

问题是您更改了 TableModel 中的数据。当数据更改时,表格需要重新绘制自身,以便您的 prepearRenderer(...) 方法被第二次调用,这次单元格的值为“0”。

不要更改模型中的数据。删除该声明。

相反,您可以更改渲染器中的数据。默认渲染器是 JLabel,因此您可以执行以下操作:

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

关于Java swing与prepareRenderer的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47856508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com