[英]Java swing problems with prepareRenderer
我正在實現游戲的界面。 該游戲有一個由jtable表示的棋盤。
每個像元都有一個介於0和6之間的數字。
我想使表格顯示為彩色的“ O”而不是數字,例如:1->綠色2->紅色等。我已經實現了:
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");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.