我有下面的代码。我可以让第一个if语句在它们被涂成红色的地方工作。
如果第二个语句找到一个名为“rats-3”的行,那么该行将被涂成黑色,那么我无法使它工作。有人能建议吗?
执行第三个else if语句,并将所有剩余单元格涂成绿色
{
JTable table = new JTable(array, columnHeaders)
{
@Override
public Component prepareRenderer(TableCellRenderer renderer, int rowIndex,int columnIndex)
{
JComponent component = (JComponent) super.prepareRenderer(renderer, rowIndex, columnIndex);
if(
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_FFES-2")||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_FFES-3") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_FFES-4") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_FOYE-2") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_DINO-2") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_DINO-3") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_DINO-4") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_DINO-6") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_FOYE-1") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_CRUA-1") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_CRUA-2")||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_CRUA-3")||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_CRUA-4")
&& columnIndex == 0) {
component.setBackground(Color.RED);
if(getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_RATS-3") && columnIndex == 0){
component.setBackground(Color.black);
}}
else if(!getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_RATS-4") && columnIndex == 0){
component.setBackground(Color.GREEN);
}
return component;
}
根据camickr的评论,我已经修改了if语句,但是现在所有的单元格都变成了红色。
JTable table = new JTable(array, columnHeaders)
{
@Override
public Component prepareRenderer(TableCellRenderer renderer, int rowIndex,int columnIndex)
{
JComponent component = (JComponent) super.prepareRenderer(renderer, rowIndex, columnIndex);
if(
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_FFES-2")||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_FFES-3") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_FFES-4") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_FOYE-2") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_DINO-2") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_DINO-3") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_DINO-4") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_DINO-6") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_FOYE-1") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_CRUA-1") ||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_CRUA-2")||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_CRUA-3")||
getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_CRUA-4")
&& columnIndex == 0) {
component.setBackground(Color.RED);
if(getValueAt(rowIndex, 1).toString().equalsIgnoreCase("T_RATS-3") && columnIndex == 0){
component.setBackground(Color.black);
}}
return component;
}
2条答案
按热度按时间vbkedwbf1#
注意:不应重写
prepareRenderer(...)
像这样的方法。您通常会覆盖prepareRenderer(...)
当您要为给定行中的所有列高亮显示时。要自定义特定列的呈现,应创建自定义呈现器并将呈现器添加到该列。
请参阅:使用GetTableCellRenderComponent更改jtable单元格的颜色对于一个工作示例来说什么都没有发生。
为什么你有13个
getValueAt(rowIdex, 1).toString()
声明?你为什么用这个
equalsIgnoreCase(...)
.您可以通过以下方式简化逻辑:
打字更少,维护更容易,效率更高。
如果你想得到真正的幻想,你可以添加所有的字符串值到一个
Set
作为类中的示例变量)。然后你可以使用:如果第二种说法奏效,我就做不到
现在有一个嵌套的if语句。它应该是一个“else语句”。
您的逻辑(简化)类似于:
既然逻辑永远不会通过第一个if条件,那么第二个if条件怎么可能是真的呢?
请注意,您也可以通过添加以下逻辑来简化if条件:
现在你的其他条件不需要检查列。
我回答的要点是简化代码,以便更容易发现逻辑错误。
编辑:
所有的细胞都保持红色
每次都需要将渲染器重置为其默认值。
基本代码应为:
6psbrbz92#
第二个if语句在第一个if语句中。因此它永远不会是真的(因为外部和内部语句没有公共字符串):
应该是:
具体来说,您需要在以下行之后结束第一个if块:
关于13个GET和比较,请考虑以下内容:
这样地:
编辑
正确的else if代码。
隔离if-else代码并测试:
测试输出:
编辑#2
moved columnindex==0检查是否分隔 Package 。使每个if语句更易于阅读,并在columnindex不为0时跳过不必要的代码。