gpt4 book ai didi

java - jtable 单元格渲染器在运行时更改单元格的背景颜色

转载 作者:搜寻专家 更新时间:2023-11-01 01:44:47 26 4
gpt4 key购买 nike

我正在尝试创建一个表格,并根据其他列的内容为特定单元格着色黄色、红色或白色。为此,我循环遍历填充值的行,然后检查内容。这对当前显示在屏幕上的每一行都适用,但是当程序到达未显示的行时,或者如果用户尝试滚动每个单元格,它的背景颜色将变回白色。我在网上搜索了解决方案,唯一听起来合理的想法是在每次循环后重置 cellRenderer,但这不起作用,因为它也会重置每个单元格。

我希望有人知道这个问题的解决方案,或者可以告诉我我哪里弄错了什么。

我正在使用这个循环

for(int e = 0; e < modules.size(); e++)
{
gui.clearOutputStream();
gui.getOutputStream().setText("Load Modul " + modules.get(e) + "\r\n");
version = getVersion(modules.get(e));

//Update current Row
updateRow(gui.getReleaseTabelle(), e);
}

调用这个方法

public void updateRow(JTable target, int row){
//...
//insert Values here
//...
CustomRenderer cr = new CustomRenderer();
cr.tab = target;
if(!target.getValueAt(row, 2).equals(target.getValueAt(row, 3)))
{
cr.Val1 = target.getValueAt(row, 1).toString();
target.setValueAt("X", row, 1);
}
else if(!target.getValueAt(row, 7).equals(""))
{
cr.Val1 = target.getValueAt(row, 1).toString();
target.setValueAt("Y", row, 1);
}
else
{

}
target.getColumnModel().getColumn(1).setCellRenderer(cr);

}

这是我的 CustomRenderer

class CustomRenderer extends DefaultTableCellRenderer 
{
private static final long serialVersionUID = 6703872492730589499L;
public String Val1;
public JTable tab;

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

if(tab.getValueAt(row, 1).equals("Y")){
cell.setBackground(new java.awt.Color(255, 255, 0));
tab.setValueAt(Val1, row, 1);
}
else if(tab.getValueAt(row, 1).equals("X")){
cell.setBackground(new java.awt.Color(255, 50, 50));
tab.setValueAt(Val1, row, 1);
}
else
{
//do nothing
}
return cell;
}
}

最佳答案

不要更新您的 CutomRenderer 类中的表格数据。您的 Renderer 类应该检查条件并为单元格着色。我已经使用了您的 CustomRenderer 类并根据单元格中存在的数据呈现单元格。如果单元格的数据是“Y”,则将其着色为黄色。如果数据为“N”,则将其着色为灰色。

Rendering in JTable

import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;


public class ColoringCells {

private static Object[] columnName = {"Yes", "No"};
private static Object[][] data = {
{"Y", "N"},
{"N", "Y"},
{"Y", "N"}
};


public static void main(String[] args) {
Runnable r = new Runnable() {

@Override
public void run() {

JFrame frame = new JFrame();
JTable table = new JTable(data, columnName);
table.getColumnModel().getColumn(0).setCellRenderer(new CustomRenderer());
table.getColumnModel().getColumn(1).setCellRenderer(new CustomRenderer());

frame.add(new JScrollPane(table));
frame.setTitle("Rendering in JTable");
frame.pack();
frame.setVisible(true);
}
};

EventQueue.invokeLater(r);
}
}


class CustomRenderer extends DefaultTableCellRenderer
{
private static final long serialVersionUID = 6703872492730589499L;

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

if(table.getValueAt(row, column).equals("Y")){
cellComponent.setBackground(Color.YELLOW);
} else if(table.getValueAt(row, column).equals("N")){
cellComponent.setBackground(Color.GRAY);
}
return cellComponent;
}
}

关于java - jtable 单元格渲染器在运行时更改单元格的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14563799/

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