JTable の行の背景色の更新
問題:
背景色を更新しようとしたときJTable 内の行の場合、最初の反復でのみ機能し、失敗します。
解決策:
この問題は、ColorTable クラスの setRowColor メソッドが後続の行の背景色をリセットしないために発生します。これを解決するには、コードを次のように変更する必要があります:
public void resetColor(Color color) { for (int i = 0; i < this.getRowCount(); i++) { // Reset all rows to the specified color this.setRowColor(i, color); } }
さらに、選択された行が色付けされないようにするには、prepareRenderer メソッド内に次の行を追加する必要があります:
if (rowSelection != null && isRowSelected(row)) { continue; }
これにより、選択した行がデフォルトの背景色を維持するようになります。
例コード:
// Import necessary libraries... public class ColorTable extends JTable { private static final long serialVersionUID = 1L; private Map rowColor = new HashMap(); private Map columnColor = new HashMap(); private Color cellColor; private Color defaultColor; public ColorTable(TableModel model) { super(model); } public void setRowColor(int row, Color c) { rowColor.put(new Integer(row), c); } // ... Other methods remain the same ... @Override public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { Component c = super.prepareRenderer(renderer, row, column); if (defaultColor == null) { defaultColor = c.getBackground(); } // Color order is as follows: // rowSelection, checkBox toggle for row color, column color, cell color if (rowSelection != null && isRowSelected(row)) { continue; } // ... return c; } // ... Other methods remain the same ... } // ... Other code remains the same ...
以上がJTable の行の背景色を更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。