![](/img/trans.png)
[英]JTable is coloring every cell when I only want it to color specific cells
[英]Color only specific cells in JTable
我正在尋找這個問題的解決方案:我有一個包含數據的excel文件。 一些細胞具有黃色背景。 我已經創建了一個代碼,用於將文本導入JTable,工作正常。 但我也想將背景單元格顏色導入特定單元格。 為簡單起見,這個例子,我沒有使用循環,從源等讀取excel數據。閱讀論壇后我明白我需要CustomCellRenderer。
我有這個方法的問題,因為這個代碼首先正確地着色列中的單元格,但是當我開始滾動此表中的彩色單元格時,它將整個列重新着色為黃色。 (見截圖)
我以為我可以添加else語句來專門將剩余的單元格着色為白色,但這種方法對我來說不起作用,因為我會覆蓋以前的單元格結果。
你能指點我這個解決方案嗎? (這是一個bug,還是JTable的預期行為?)。 我正在使用NetBeans和GUI拖放生成器
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());
使它成為當您的單元格不應為黃色時,將背景設置為白色(或表格的背景顏色)。
擴展DefaultTableCellRenderer
的渲染器使用相同的組件( JLabel
)作為所有單元格的模板(參見DefaultTableCellRenderer
實現說明 - 他們稱之為橡皮圖章)。 將背景設置為黃色后,它將保持黃色以呈現連續的單元格,直到您再次更改其背景顏色。
用以下內容替換for循環:
boolean isYellow = false;
for (int i = 0; i < 3; i++) {
if ((row == coordinatesYellow[i][0]) && (column == coordinatesYellow[i][1])) {
c.setBackground(Color.yellow);
isYellow = true;
}
}
if( !isYellow )
c.setBackground(Color.white);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.