所以我要做的是,根据最后一列内的值更改每行的颜色。
我已经找到了这个解决方案:改变JTable的背景色,效果非常好。
但除此之外,当第四列达到与第二列相同的值时,我想将行的颜色切换为绿色。
我用Cristian Marian的方法写了自己的课
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component comp = super.prepareRenderer(renderer, row, column);
int second = (int) this.getModel().getValueAt(row, 1);
int forth = (int) this.getModel().getValueAt(row, 3);
int kat = Kategorie.getNumber((String) this.getModel().getValueAt(row, 2));
if (kat > 0) {
if (second == forth) {
comp.setBackground(Color.GREEN);
} else {
comp.setBackground(Color.RED);
}
}
return comp;
}
仍然只有每列中的最后一个单元格变为绿色,而不是整个单元格。但是当我在这一行打卡时,整行都会切换颜色
最后一列中的值将由另一帧更改。
当最后一列中的值达到与第二列中相同的值时,如下所示:
import java.awt.Component; import java.awt.Color; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; /* * * This class is the Color Renderer for the "Find All" Button. * It basically highlights all of the scripts with a certain color * This renderer is responsible Highlighting the JTable. * Based on the particular Mark that has been entered in the find all * text field * * */ public class MarkSearchColorCellRenderer extends DefaultTableCellRenderer implements ColorCellRenderer, GradeValidation { public MarkSearchColorCellRenderer(int aMark, Color aColor) { the_Mark = aMark; theColor = aColor; } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); setHorizontalAlignment(RIGHT); if ( column == 0 ) // script no column { //check the current Mark within this row //i.e. for this particular candidate Object curMark = table.getValueAt(row, column+2); //highlight this cell a certain color if the //search mark has been found for this particular candidate highlightScripts(curMark, cell); } else if(column == 1) // Candidate No. Column { Object curMark = table.getValueAt(row, column+1); highlightScripts(curMark, cell); } else if ( column == 2 ) // mark column { Object curMark = value; highlightScripts(curMark, cell); } else if (column == 3) // Grade Column { setHorizontalAlignment(LEFT); Object curMark = table.getValueAt(row, column-1); highlightScripts(curMark, cell); } else if (column == 5) // script no column { Object curMark = table.getValueAt(row, column+2); highlightScripts(curMark, cell); } else if( column == 6) // Candidate No. Column { Object curMark = table.getValueAt(row, column+1); highlightScripts(curMark, cell); } else if ( column == 7) // mark column { Object curMark = value; highlightScripts(curMark, cell); } else if ( column == 8) // Grade Column { setHorizontalAlignment(LEFT); Object curMark = table.getValueAt(row, column-1); highlightScripts(curMark, cell); } else { // Should never arrive here. // If it does, then you've rendered a column that may not // function with this class // therefore, I'm going to exit the program //System.exit(0); } table.repaint(); return cell; } // end getTableCellRendererComponent() // Change the color of this cell if the aValue matches // the value within the particular cell private void highlightScripts(Object aValue, Component aCell) { Object value = aValue; Component cell = aCell; if ( value != null ) { if (value instanceof Integer ) { Integer amount = (Integer) value; if( amount.intValue() == the_Mark ) { cell.setBackground( theColor ); } else { cell.setBackground( Color.white ); } } } else { cell.setBackground( Color.white ); } }// end highlightScripts() }//end class
您的方法的问题是,您使用getTableCellRendererComponent,因此只有该单元格会更改其颜色。
我必须做一些类似的东西。根据列的值,我必须给行上色。
我使用了一个类来扩展JTable并覆盖prepareRenderer
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component comp = super.prepareRenderer(renderer, row, column);
if (populated) { //this if was just to make sure that I have data in my table
/*
*This piece makes the code ignore the rows that are selected as this approach messes up that blue color that selected rows get
*/
int[] rows = this.getSelectedRows();
boolean rowisSelected = false;
for (int rowIndex : rows) {
if (row == rowIndex) {
rowisSelected = true;
break;
}
}
/*
*And this is the part that does the coloring
*/
if (!rowisSelected) {
Integer status = Integer.parseInt((String)
int modelRow = convertRowIndexToModel(row);
this.getModel().getValueAt(modelRow, Constants.HIDDEN_COLUMN));
switch (status) {
case 1:
comp.setForeground(Color.BLACK);
comp.setBackground(Color.WHITE);
break;
case 2:
comp.setForeground(Color.LIGHT_GRAY);
comp.setBackground(Color.WHITE);
break;
case 3:
comp.setForeground(Color.BLACK);
comp.setBackground(Constants.DOWNLOADED_COLOR);
break;
case 4:
comp.setForeground(Color.LIGHT_GRAY);
comp.setBackground(Constants.DOWNLOADED_COLOR);
break;
}
}
}
return comp;
}
您的行应该是这样的(没有选中的行):
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component comp = super.prepareRenderer(renderer, row, column);
int modelRow = convertRowIndexToModel(row);
String second = this.getModel().getValueAt(modelRow, 1));
String forth= this.getModel().getValueAt(modelRow, 3));
if(second.equals(forth)){
comp.setBackground(Color.GREEN);
}
return comp;
}
您好,我是java jtable的新手。我正在寻找一种在我的程序中有效的方法,但我没有找到它的任何运气。这是我的Jtable 数据来自ms Access数据库,但我想改变状态列中值为“非活动”的行的背景/前景。我在网上找到了很多例子,但所有的例子在我的程序中都是不可能的。有人能帮帮我吗?这是我的模特 这是创建我的表的方法,以及我如何从数据库中获取数据 我该如何添加以这种方式重新绘制的表格?有人能举
基于这个问题我这样做了: 所以我有票,每张票都有不止一个棋盘。我想换每张票的颜色。 结果: 颜色是正确的,但是在滚动后,颜色变得不规则,如下图所示。 注:每个“ticket0、ticket1、ticket2”等应具有交替颜色。
问题内容: 我有一个3列的JTable。我已经为所有3列设置了这样的代码(也许不是很有效?)。 在一个随机的背景颜色为每一行返回一个组件。 程序运行时如何将背景更改为其他随机颜色? 问题答案: 一种方法是存储模型中每一行的当前颜色。这是一个固定在3列3行的简单模型: 注意通话; 这将导致仅更新表的该行。 渲染器可以从表中获取模型: 更改行的颜色很简单:
我试图在基于swing的GUI中更改的背景。我已将该表添加到中。但是,表格中没有单元格的区域不会改变颜色。我尝试更改滚动窗格的背景色和前景色。然而,这也无济于事。我需要编辑JTable的哪个组件来更改白色背景。下面是我代码的一部分。 JTable的代码
我添加了一个表,但问题是,面板没有显示其背景色。我试过设置滚动窗格的背景色等,但它不起作用。框架有一个按钮“验证”,单击该按钮时,在其下方显示一个表。在单击之前,表格将显示的部分为纯灰色。我希望整个部分是象牙背景。请帮我诊断这个问题。
我正在使用以下代码更改JTable中一行的背景色。对于所有具有字符串值的单元格,行的颜色都会更改,但是对于具有整数值或双数值的单元格,行的颜色不会更改。