3

デスクトップアプリケーションを作成するために、GUIビルダーでnetbeansを使用しています。jTables の特別なセルに色を付けるために、サンプル コードに基づいてカスタム DefaultTableCellRenderer を実装しました。これまでのところ、動作します。

私の問題は、上書きされた関数「getTableCellRendererComponent()」のelseケースです。指定された範囲にないセルが「白」になることを望まない - これらのセルが既に持っている色で表示されるようにしたい「赤」でした)。

誰かが私を助けてくれたら嬉しいです!!

よろしくお願いします。
シュテフェン

class ColoredTableCellRenderer extends DefaultTableCellRenderer
{

    /** constructor */
    public ColoredTableCellRenderer(int rowToColorizeStart, int rowToColorizeStop, int columnToColorizeStart, int columnToColorizeStop, Color color)
    {
        mRowToColorizeStart = rowToColorizeStart;
        mRowToColorizeStop = rowToColorizeStop;
        mColumnToColorizeStart = columnToColorizeStart;
        mColumnToColorizeStop = columnToColorizeStop;
        mColor = color;
    }

    private int mRowToColorizeStart = 0;
    public void setRowToColorizeStart(int rowToColorizeStart) {
        mRowToColorizeStart = rowToColorizeStart;  
    }
    public int getRowToColorizeStart() {
        return mRowToColorizeStart;  
    }

    private int mRowToColorizeStop = 0;
    public void setRowToColorizeStop(int rowToColorizeStop) {
        mRowToColorizeStop = rowToColorizeStop;  
    }
    public int getRowToColorizeStop() {
        return mRowToColorizeStop;  
    }

        private int mColumnToColorizeStart = 0;
    public void setColumnToColorizeStart(int columnToColorizeStart) {
        mColumnToColorizeStart = columnToColorizeStart;  
    }
    public int getColumnToColorizeStart() {
        return mColumnToColorizeStart;  
    }

    private int mColumnToColorizeStop = 0;
    public void setColumnToColorizeStop(int columnToColorizeStop) {
        mColumnToColorizeStop = columnToColorizeStop;  
    }
    public int getColumnToColorizeStop() {
        return mColumnToColorizeStop;  
    }

    private Color mColor = Color.WHITE;
    public void setColor(Color color) {
        mColor = color;  
    }
    public Color getColor() {
        return mColor;  
    }


    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

        Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);    

        if( (row >= getRowToColorizeStart()) && (row <= getRowToColorizeStop()) && (column >= getColumnToColorizeStart()) && (column <= getColumnToColorizeStop()) && (isSelected == false) ) {
            cellComponent.setBackground(getColor());    
        } else {
           cellComponent.setBackground(Color.WHITE);
        }

        return cellComponent;

    }
}
4

3 に答える 3

4

カスタム DefaultTableCellRenderer を記述して特定のセルのみを色付けする方法、Java

コード行

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

何が起こるかについて話している

  • セルが選択されているかどうか ( boolean isSelected)

  • セルが選択されている場合、および/またはフォーカスもある場合 ( boolean hasFocus)

  • JTable の行 ( int row)

  • JTable の列 ( int column)

Font次に、 、BorderColorIconeiを変更できます

注意 ---> を変更Object valueしないでください。絶対に変更しないXxxRendererでください。

編集

  • JTableには2つの次元があり、行のみが定義されています。prepareRendererを見てください

  • prepareRenderer は行の色付け用に指定されています。私の質問はあなたまたはここで役立ちます。override を忘れないでください。ほとんどの場合、JTable は並べ替えまたはフィルター処理できるため、インデックス モデルとビューを失う可能性があります。int modelRow = convertRowIndexToModel(row);

于 2012-10-15T12:20:24.237 に答える
2

あなたが探しているのは次のことだと思います。セルを描画するために、テーブルの fg と bg を使用します。

else {
    setBackground(table.getBackground());
    setForeground(table.getForeground());
}
于 2012-10-15T12:12:41.670 に答える
0

elseブロックを次のように変更する必要があります

 else if (cellComponent.getBackground != color){
         cellComponent.setBackground(white);
  }
于 2012-10-15T12:13:03.573 に答える