3

以下のように独自のテーブル セル レンダラーを指定して、特定の JTable 列にアイコンを追加しようとしています (このチュートリアルの一部に基づいています)。

public class MyTableCellRenderer extends DefaultTableCellRenderer {

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

        JLabel label = (JLabel)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        if(column == MyTableModel.IMAGE_COLUMN){
            String status = (String)value;
            Icon icon = StatusImageUtil.getStatusIcon(status);

            if(icon == null){
                label.setText(status);
            }else{
                label.setIcon(icon);
            }
        }
        return label;
    }
}

上記のコードは動作しますが:

  1. ifステートメントで指定したい特定のアイコンではなく、すべてのセルにアイコンがあります
  2. アイコンのみを持つべきセル MyTableModel.IMAGE_COLUMN にもテキストがあります。

前もって感謝します

4

1 に答える 1

4

パフォーマンスを向上させるために、JTable はレンダリングする各セルに同じラベルを再利用します。つまり、変更するたびにテキストとアイコンの両方を設定する必要があります。

同じことがフォント、背景色などにも当てはまります

 if(icon == null){
                    label.setText(status);
                    label.setIcon(null);
            }else{  
                    label.setText("");
                    label.setIcon(icon);
            }

トリックを行う必要があります、

于 2009-08-18T05:34:48.477 に答える