カスタムTableCellRendererが機能していない(テーブルロウレンダリング)

StackOverflow https://stackoverflow.com/questions/3898719

質問

私は私のjtableの特定の行をレンダリングしようとしています(それは異なる背景色を持つ必要があり、それは太字の文字が必要です)。

カスタムを実装する方法に関するいくつかの質問を見つけました TableCellRenderer (ここここ)およびチュートリアル テーブルの使用方法 そしてこれ(テーブルロウレンダリング).

私はaを使用しています JInternalFrame を表示します JTable. 。私は両方のソリューションを実装しようとしましたが、どちらも実装しようとしました getCellRenderer または prepareRenderer 呼ばれています。デバッグ時には、新しいJTableが作成されているのがわかりますが、メソッド内のブレークポイントは呼び出されません。

私のコードは次のように見えます:

this.add(createData(model));

private JComponent createData(ProfitLossTableModel model) {
    JTable table = new JTable(model) {

        public TableCellRenderer getCellRenderer(int row, int column) {
            if ((row == 0) && (column == 0)) {
                DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
                renderer.setHorizontalAlignment(JLabel.RIGHT);
                renderer.setBackground(Color.red);
                return renderer;
            } else {
                return super.getCellRenderer(row, column);
            }
        }
    };

    table.setPreferredScrollableViewportSize(table.getPreferredSize());
    table.changeSelection(0, 0, false, false);
    table.setAutoCreateRowSorter(true);
    return new JScrollPane(table);
}

ご覧のとおり、モデルは私の実装です AbstractTableModel.

もちろん、私は何かが足りないということです。電話しようとしました repaint() 何かが起こったかどうかを確認しますが、何も起こりませんでした。

また、jinternalframeの中にJPaneを入れようとしましたが、Jscrollpaneを追加しましたが、何も発生しませんでした。

何か助けがありますか?

ティア、

ボブ

役に立ちましたか?

解決

議論されているように 概念:編集者とレンダラー, 、「テーブルはテーブルモデルを呼び出します getColumnClass メソッド、列のセルのデータ型を取得します。」 AbstractTableModel これで示唆されているように、適切な値を返します .

補遺:

列ではなく、列をレンダリングしようとしています。

ロブ・カミックの テーブルロウレンダリング オーバーライドするアプローチ prepareRenderer() 適切なようです。

tabbedPane.addTab("FirstRow", createFirstRow(model));
...
private JComponent createFirstRow(DefaultTableModel model) {

    final Font font = new Font("Serif", Font.BOLD, 14);

    JTable table = new JTable(model) {

        public Component prepareRenderer(
                TableCellRenderer renderer, int row, int column) {
            Component c = super.prepareRenderer(renderer, row, column);
            if (!isRowSelected(row)) {
                c.setBackground(row == 0 ? Color.yellow: getBackground());
                c.setFont(row == 0 ? font : getFont());
            }
            return c;
        }
    };

    table.setPreferredScrollableViewportSize(table.getPreferredSize());
    table.changeSelection(1, 1, false, false);
    return new JScrollPane(table);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top