Swing Jtableの行の色を設定しようとしています。 私はこのクラスを使用してネット上の提案としてJtableを拡張します。jtableの行の背景色をリフレッシュ
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);
}
public void setColumnColor(int column, Color c) {
columnColor.put(new Integer(column), c);
}
public void setCellColor(Color c) {
cellColor = c;
}
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
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 (! isRowSelected(row)) {
Color color = (Color) rowColor.get(new Integer(row));
if (color == null || Boolean.FALSE.equals(getModel().getValueAt(row, 0)))
color = (Color) columnColor.get(new Integer(column));
if (color == null) {
// cell color only if cell has special value, for example purposes,
// if the cell value begins with a 2
Object value = getValueAt(row, column);
if (value != null && value.toString().startsWith("2"))
color = cellColor;
}
if (color != null)
c.setBackground(color);
else
c.setBackground(defaultColor);
}
return c;
}
public void resetColor(Color color) {
for(int i=0;i<this.getRowCount();i++)
this.setRowColor(i, color);
}
}
同じ色のすべての行を初期化するために、単にresetColor(Color color)メソッドを追加しました。
最初の使用では縫い目がありますが、色を変更したいときに問題が発生します。たとえば、ボタンアクションリスナー内でソルバインコードを実行すると、最初の繰り返しでテーブルを適切に色付けした後、バックグラウンドを変更しないでください。
deployTable.resetColor(Color.green);
// set red background to the
for (Integer x : indexes) {
System.out.println("index "+x+" red!");
deployTable.setRowColor(x, Color.red);
}
deployTable.revalidate();
誰でも何ができるか考えていますか?それは自分自身が私の質問のいずれかに答える有線音も
おかげで、 サント
'repaint()'は表示されません。 – trashgod