JTable单元格文本颜色更改

3

我对Java和编程都比较新,所以问题请见谅。我的目标是制作一个记账程序,在收支列中,当用户输入负数(例如-1.150€)时,只有该列的特定单元格会变成红色(或任何颜色,但大多数记账程序使用红色)。我还没有开始编写代码,因此无法在此处输入代码。我也不需要它右对齐,因为我已经做到了。

附注:如果这篇帖子/问题已经存在,请原谅,我已经搜索了但没有找到能够帮助我的东西。


可能是重复的问题,参考如何将JTable单元格输入标记为无效? - trashgod
@trashgod,我不会说是重复的,因为这篇文章并不完全相同,但无论如何感谢您的评论。 - Ilias_Tria
1
请编辑您的问题,包括一个[mcve],展示您当前的TableCellEditor方法。相关示例可在此处查看:http://stackoverflow.com/a/12352838/230513。 - trashgod
@trashgod,我没有一个TableCellEditor,也没有一个用于我想要实现的功能的类。我一直在互联网上搜索所有可能的解决方案。你的链接似乎有点可行,但我还不确定。谢谢你的链接。 - Ilias_Tria
这里比较了两种方法链接 - trashgod
1个回答

7

一个小例子,这个例子在单列中使用了双精度值。这个版本使用JTable.setDefaultRenderer处理Double.class

您也可以设置颜色

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

@SuppressWarnings("serial")
public class TableWithColors {
    protected static JTable createTable() {
        Object[][] rows = new Object[][] {{1.23d},{-20.5d},{5.87d},{2.23d},{-7.8d},{-8.99d},{9d},{16.25d},{4.23d},{-26.22d},{-14.14d}};
        Object[] cols = new Object[]{"Balance"};
        JTable t = new JTable(rows,cols) {
            @Override
            public Class<?> getColumnClass(int column) {
                if(convertColumnIndexToModel(column)==0) return Double.class;
                return super.getColumnClass(column);
            }
        };
        t.setDefaultRenderer(Double.class, new DefaultTableCellRenderer(){
            @Override
            public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column) {
                Component c = super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
                c.setForeground(((Double) value)>0 ? Color.BLUE : Color.RED);
                return c;
            }
        });
        return t;
    }

    private static JFrame createFrame() {
        JFrame f = new JFrame("Table with colors");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new BorderLayout());
        f.add(new JScrollPane(createTable()),BorderLayout.CENTER);
        f.setSize(new Dimension(60,255));
        return f;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                createFrame().setVisible(true);
            }
        });
    }
}

走起来就像这样:

将余额从负数变为正数,反之亦然


1
感谢您关注模型/视图索引。 - trashgod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接