当前位置: 首页 > 知识库问答 >
问题:

如何在JTable中更改满足某些条件的文本的颜色?

沈长恨
2023-03-14

我试图添加if-else语句来更改文本的颜色。然而,它并不能很好地工作。我希望只把40分以下的分数改成红色,但我不知道为什么我的文字都改成了红色。我能知道我犯了什么错误吗?

在if-else语句中,我编写了当标记低于40时更改文本颜色的代码。但是,它会将所有文本更改为红色。

import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;


public class testing{

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                mark();
            }
        });
    }

    public static void mark() {

        String[] columns = new String[] {"Name", "Marks(%)"};

        Object[][] data= new Object[][] {
                {"Aby", "100"},
                {"Amy", "30"}
        };

        JFrame frame = new JFrame("Student Marks List");
        frame.setVisible(true);
        frame.setSize(600, 500);
        frame.setLayout(new BorderLayout());

        Panel details = new Panel(null);
        details.setBounds(0,50, 1000, 125);

        Panel contents = new Panel(null);
        contents.setBounds(0,50, 1000, 600);

        frame.add(details, BorderLayout.NORTH);
        frame.add(contents, BorderLayout.CENTER);

        JTable tb1;
        tb1 = new JTable(data, columns);
        JScrollPane sp = new JScrollPane(tb1);

        tb1.getTableHeader().setOpaque(false);
        tb1.getTableHeader().setFont(new Font("Barlow Condensed ExtraBold", Font.BOLD, 20));
        tb1.getTableHeader().setPreferredSize(new Dimension(100, 30));
        tb1.setFont(new Font("Barlow Condensed", Font.BOLD, 20));
        tb1.setRowHeight(30);

        for (int i = 0; i < tb1.getRowCount(); i++) {
            Object x = tb1.getValueAt(i, 1);
            String y = x.toString();
            double z = Double.parseDouble(y);
            if (z < 40) {
                tb1.setForeground(Color.RED);
            }
            else {
                tb1.setForeground(new Color(38, 120, 81));
            }
        }

        DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
        centerRenderer.setHorizontalAlignment(JLabel.CENTER);

        tb1.setBounds(25,10,200,375);
        sp.setBounds(25,10,200,375);
        contents.add(sp);

    }

}

共有1个答案

吴开宇
2023-03-14

创建一个单元格渲染器,该渲染器将条件和颜色设置为true和false。将此单元格渲染器指定给该列。

    col = table.getColumnModel().getColumn(1);
    col.setCellRenderer(new CellRenderer(v -> v < 40d, Color.RED, new Color(38, 120, 81)));

单元格渲染器

class CellRenderer extends DefaultTableCellRenderer {
    DoublePredicate condition;
    Color fgFalse;
    Color fgTrue;

    public CellRenderer(DoublePredicate condition, Color fgFalse, Color fgTrue) {
        super();
        this.condition = condition;
        this.fgFalse = fgFalse;
        this.fgTrue = fgTrue;
    }

    @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);
        cell.setForeground(condition.test((Double)value) ? fgTrue : fgFalse);
        return cell;
    }
}
 类似资料:
  • 当条件(if)满足时,我尝试将文本着色为绿色或红色。 这是我的函数getAll() 在我的表格中,有一部分我想给文本上色。下面的例子不起作用。 我也试过,但它总是在绿色或红色上着色。 我想做这样的事情:如果有一天,然后颜色文本的红色或绿色。

  • 问题内容: 对于给定的多色PNG (具有透明度),什么是最好的/快速惯用的方法: 创建一个副本 在副本中找到所有黑色像素并将其更改为红色 (返回修改后的副本) 关于SO有一些相关的问题,但我一直无法找到可行的方法。 问题答案: 您必须提取图像的像素缓冲区,然后可以循环浏览,并根据需要更改像素。最后,从缓冲区创建一个新图像。 在Swift 3中,这看起来像:

  • 本文向大家介绍Python 找到列表中满足某些条件的元素方法,包括了Python 找到列表中满足某些条件的元素方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇Python 找到列表中满足某些条件的元素方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 我想在TextField中更改字体颜色。我找到了、来更改背景和边框的颜色,但没有找到文本的颜色。

  • 我想根据用户需要将我写的文本(和字体颜色)更改为另一种颜色。 我制作了一个JFrame,并添加了JTextPane。在文本窗格的右侧,我有一个不同颜色的列表(“白色”、“黑色”、“绿色”等)。Jframe还有一个JMenuBar,如果用户突出显示列表中的一个元素(比如黑色),我想更改textpane的背景色(我知道这很愚蠢,但这是老师的作业) 问题是,文本是黑色的,所以当我改变背景颜色时,文本“消

  • 对于给定的多色PNG(带透明度),最好的/快速的惯用方式是什么: 创建一个重复的 关于SO有几个相关的问题,但是我还没有找到有效的方法。