gpt4 book ai didi

java - 更改 JTable 行的颜色

转载 作者:行者123 更新时间:2023-12-01 14:02:39 27 4
gpt4 key购买 nike

我有两个 JTable tblOrderInfo 和 tblDetailInfo 我想根据 tblDetailInfo 行对 tblOrderInfo 行进行着色,我做了很多研究并发现 Rob Camick's文章和许多其他文章,但它适用于基于静态值检查的着色,但不适用于我的 JTable 动态过滤案例。

我使用 Rob 的方法尝试了一个函数,但它不起作用。

    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));

最佳答案

每个单元格都会调用prepareRenderer()方法,因此您的基本代码结构是错误的。您循环抛出一个表中的所有行,然后循环抛出第二个表中的所有行。因此,如果在任何地方找到匹配项,则该行将着色,并且表中的每一行都将相同。

i want to color the tblOrderInfo rows on the basis of tblDetailInfo rows,

我认为你的基本伪代码应该是:

foreach row in the detail table

if ((detail.orderId.equals(order.orderid)
and (detail.design.equals(order.design)
and (detail.sno.equals(order.sno))
{
c.setForeground( Color.RED);
break;
}

关于java - 更改 JTable 行的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19224739/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com