簡體   English   中英

僅對JTable中的特定單元進行着色

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

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