Изменение цвета текста ячейки JTable

Я новичок в Java и самом программировании, так что извините за вопрос. Я пытаюсь сделать следующее:

Я делаю бухгалтерскую программу. Я хочу, чтобы в столбце, где отображается доход / результат, когда пользователь вводит отрицательное число (например, -1,150 €), число становится красным (или любым другим цветом, но красный цвет которые используют большинство бухгалтерских программ). только эта конкретная ячейка только в этом столбце. Я еще не начал с кода, поэтому я не могу ввести его здесь. Мне также не нужно, чтобы он был выровнен по правому краю, так как я уже сделал это.

PS. Извините, если этот пост/вопрос уже существует, я искал, но не нашел ничего, что могло бы мне сильно помочь.


person Ilias_Tria    schedule 16.02.2016    source источник
comment
Возможный дубликат Как пометить ввод ячейки JTable как недопустимый?.   -  person trashgod    schedule 16.02.2016
comment
@trashgod Я бы не сказал, что это дубликат, поскольку это не совсем тот же пост, но в любом случае спасибо за ваш комментарий.   -  person Ilias_Tria    schedule 16.02.2016
comment
Измените свой вопрос, включив в него минимально воспроизводимый пример, демонстрирующий ваш текущий TableCellEditor подход. Связанный пример можно увидеть здесь.   -  person trashgod    schedule 16.02.2016
comment
@trashgod У меня нет ни TableCellEditor, ни класса для функции, которую я хочу реализовать. Я искал в Интернете все возможные решения. Ваша ссылка кажется многообещающей, но я еще не знаю. Спасибо за ссылку   -  person Ilias_Tria    schedule 16.02.2016
comment
Два подхода сравниваются здесь.   -  person trashgod    schedule 16.02.2016


Ответы (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);
            }
        });
    }
}

Похоже на:

Изменить баланс с отрицательного на положительный и наоборот

person TT.    schedule 16.02.2016
comment
Спасибо за внимание к индексации модели/представления. - person trashgod; 17.02.2016