私はこの問題の解決策を探しています: 私はデータを含むExcelファイルを持っています。いくつかの細胞は黄色の背景を持っています。私はすでにJTableにテキストをインポートするためのコードを作成しました。これはうまく動作します。しかし、私は背景細胞の色を特定の細胞にもインポートしたいと思っています。この例を簡単にするために、私はループを使用せず、ソースなどからExcelデータを読み込んでいませんでした。私が理解したフォーラムを読んだ後、私はCustomCellRendererが必要です。JTable内の特定のセルのみを色付けします
このコードでは、最初に列のセルの色が正しく表示されますが、この表の色付きセルをスクロールし始めると、列全体が黄色に再現されるため、この方法に問題があります。
私は残りのセルを特に白に色付けするためにelse文を追加できると思っていましたが、私の以前のセル結果を上書きしてしまうため、このアプローチはうまくいきません。
私はこの問題の解決策を教えていただけますか? (これはバグかJTableの予想される動作ですか?)私はあなたのセルが黄色であってはならないときよう
import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class MyRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
int[][] coordinatesYellow = new int[3][2];
//[row][column] these cells are yellow
coordinatesYellow[0][0] = 3;
coordinatesYellow[0][1] = 2;
coordinatesYellow[1][0] = 4;
coordinatesYellow[1][1] = 2;
coordinatesYellow[2][0] = 2;
coordinatesYellow[2][1] = 2;
for (int i = 0; i < 3; i++) {
if ((row == coordinatesYellow[i][0]) && (column == coordinatesYellow[i][1])) {
c.setBackground(Color.yellow);
}
}
return c;
}
}
// And this is the statement I use for calling the renderer:
// resultsTable.getColumnModel().getColumn(0).setCellRenderer(new MyRenderer());
@TT - あなたのコメントは基本的に完全な答えです。 – tucuxi
@tucuxi本当に、それは私がコメントとして投稿したように些細な音だ。私はそれに答えました。 –
http://stackoverflow.com/questions/22606227/colored-table-cellsも参照してください(重複している場合もあります) – Marco13