1

Jtable を 1 つ作成しました。このテーブルは、名前とタイムスタンプの 2 つの列で構成されています。名前が「jane」の場合、行の色を黄色にしたい。以下はそのためのコードです:-

    class CustomRenderer extends DefaultTableCellRenderer {

    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);
        String name = table.getModel().getValueAt(row, 0).toString();

        if (name.trim().equals("jane")) {
            c.setBackground(Color.YELLOW);
        }
        return c;
    }
}

ただし、特定の名前の行の色を黄色に変更する代わりに、すべての行の色を変更しています。テーブルのデータを次のように設定しています

tableModelName = (DefaultTableModel)jTableName.getModel();

jTableName.setDefaultRenderer(Object.class,new CustomRenderer());

for(int i=0; i<records.size(); i++)
         {
            tableModelName.addRow(records.get(i));          

         }

私が間違っていることは何ですか?

4

1 に答える 1

4

else名前が「jane」でない場合、背景色を黄色以外に設定する句が必要です。単一のレンダラー インスタンスがすべてのレンダリングに使用されるため、そのインスタンスで色を黄色に設定すると、黄色のままになります。

JTable のソース コードを見て、組み込みのレンダラーがどのように機能するかを確認してください。

    if (isSelected) {
        setForeground(table.getSelectionForeground());
        super.setBackground(table.getSelectionBackground());
    }
    else {
        setForeground(table.getForeground());
        setBackground(table.getBackground());
    }

これをより簡単に行うには、JTable をサブクラス化し、prepareRendererをオーバーライドしてみてください。これは、このように行全体に影響する変更に便利なので、個々のセルにカスタム レンダラーを使用し、prepareRendererメソッド内の行のすべてのレンダラーを微調整できます。

于 2012-11-29T17:45:59.473 に答える