【问题标题】:JTable cell text color changingJTable单元格文字颜色变化
【发布时间】:2016-05-27 15:41:31
【问题描述】:

我对 Java 和编程本身相当陌生,所以请原谅我的问题。我想做的是:

我正在制作一个簿记程序。在显示收入/结果的列上,我想要它,所以当用户输入 数字(例如 -1.150€)时, 数字变成红色(或任何颜色,但大多数簿记程序使用红色)。仅该列上的特定单元格。我还没有开始使用代码,所以我不能在这里输入一个。我也不需要它右对齐,因为我已经这样做了。

附言。抱歉,如果此帖子/问题已经存在,我进行了搜索,但没有发现任何可以帮助我的东西。

【问题讨论】:

  • @trashgod 我不会说重复,因为它不是完全相同的帖子,但无论哪种方式都感谢您的评论。
  • 请编辑您的问题以包含一个minimal reproducible example,以显示您当前的TableCellEditor 方法。相关示例见here
  • @trashgod 我没有 TableCellEditor 也没有我想要实现的功能的类。我一直在互联网上搜索所有可能的解决方案。您的链接似乎很有希望,但我还不知道。谢谢你的链接
  • 两种方法比较here.

标签: java swing jtable double cellrenderer


【解决方案1】:

一个在单列中包含双值的小示例。此版本使用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);
            }
        });
    }
}

类似:

【讨论】:

  • 感谢关注模型/视图索引。
猜你喜欢
  • 2013-01-10
  • 2012-10-03
  • 2015-11-29
  • 1970-01-01
  • 2011-08-06
  • 2011-11-03
  • 1970-01-01
  • 2018-08-20
  • 2011-08-14
相关资源
最近更新 更多