簡體   English   中英

prepareRenderer的Java擺動問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM