3

JTableで選択した行の色を強調表示する必要があります。これには独自のCellRendererを使用していますが、機能しますが、別の行を選択しても、前の行は強調表示されたままになります。アイデアは、選択したものだけを青色に保ち、他のものは元の色に保つことです。それに加えて、私はペアの列を作成しています:灰色と非ペア:白なので、これはCellRendererのコードです

private class Renderer extends DefaultTableCellRenderer
{
    private static final long serialVersionUID = 1L;
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
                                         boolean isSelected, boolean hasFocus,
                                         int row, int column)
    {
        super.getTableCellRendererComponent(table, value, isSelected,
                                                          hasFocus, row, column);

        int columnIndex = table.getSelectedColumn();
        int rowIndex = table.getSelectedRow();

        if (columnIndex != -1 && rowIndex != -1){
            this.setBackground(Color.BLUE);
        } else {
            if (row % 2 == 0) this.setBackground(Color.decode("0xF9F9F9"));
            else this.setBackground(Color.decode("0xF1F1F1"));
        }
        return this;
    }
}

編集:F1F1F1はほぼ白の色で、F9F9F9F9はちょっと明るい灰色です

4

2 に答える 2

5

メソッドから戻る前に、以下のコードのようなものを追加する必要があります。

if (!isSelected) {
  setBackground(...);
}
于 2012-10-02T20:50:49.477 に答える
2

サードパーティのライブラリを使用してもかまわない場合: JXTableSwingX プロジェクトの には、HighLighters を使用して行の色を交互に表示するためのサポートが組み込まれています。

にを適用した結果のスクリーンショットを示す記事を見つけましHighLighterJXTable。問題は、記事が最新ではないことです。機能はそのままですが、コードが変更されています。記事ではまだAlternateRowHighligherここに示されているように言及していますが

HighlighterPipeline highlighters = new HighlighterPipeline();
highlighters.addHighlighter(new AlternateRowHighlighter());
table.setHighlighters(highlighters);

現在のアプローチはもっと似ているでしょう

JXTable table;
Highlighter alternateStriping = 
  HighlighterFactory.createAlternateStriping( Color.decode( "0xF9F9F9" ), 
                                              Color.decode( "0xF1F1F1" ) );
table.setHighlighters( alternateStriping );
于 2012-10-02T21:42:53.837 に答える