私は 2 つの JTables tblOrderInfo と tblDetailInfo を持っています。tblDetailInfo 行に基づいて tblOrderInfo 行を色付けしたいと考えています。多くの調査を行い、 Rob Camick の 記事や他の多くの記事を見つけましたが、静的値チェックに基づく色付けでは機能し、機能しません。私のケースでは、JTable の動的フィルタリングで機能します。
ロブのアプローチを使用して関数を試しましたが、機能しません。
private Component createColoring(DefaultTableModel model)
{
tblOrderInfo = new JTable( model )
{
public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
{
Component c = super.prepareRenderer(renderer, row, column);
// Color row based on a cell value
if (!isRowSelected(row))
{
c.setBackground(getBackground());
int modelRow = convertRowIndexToModel(row);
String type = (String)getModel().getValueAt(modelRow, 0);
Object orderId="";
Object design="";
Object sno="";
for(int r=0;r< tblDetailInfo.getRowCount();r++){
orderId= tblDetailInfo.getValueAt(r, util.getColumnIndex( tblDetailInfo, "orderId"));
design= tblDetailInfo.getValueAt(r, util.getColumnIndex( tblDetailInfo, "design"));
sno= tblDetailInfo.getValueAt(r, util.getColumnIndex( tblDetailInfo, "sno"));
for(int o=0;o< tblOrderInfo.getRowCount();o++){
if(( tblOrderInfo.getValueAt(o, util.getColumnIndex( tblOrderInfo, "orderId")).equals(orderId))
&& ( tblOrderInfo.getValueAt(o, util.getColumnIndex( tblOrderInfo, "design")).equals(design))
&& ( tblOrderInfo.getValueAt(o, util.getColumnIndex(tblOrderInfo, "sno")).equals(sno))
){
c.setForeground(Color.RED);
}
}
}
}
return c;
}
};
tblOrderInfo.setPreferredScrollableViewportSize(tblOrderInfo.getPreferredSize());
tblOrderInfo.changeSelection(0, 0, false, false);
tblOrderInfo.setAutoCreateRowSorter(true);
return tblOrderInfo;
}
呼び出しコードは以下です
DefaultTableModel dtm =(DefaultTableModel) tblOrderInfo.getModel();
jScrollPane2.remove(tblOrderInfo);
jScrollPane2.add(createColoring(dtm));