2016-02-16 4 views
1

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

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

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

+0

Возможный дубликат [* Как пометить JTable вход ячейки недействительным *?] (HTTP://stackoverflow.com/q/7531513/230513). – trashgod

+0

@trashgod Я бы не сказал дубликат, так как это не совсем то же сообщение, но спасибо за ваш комментарий в любом случае. –

+1

Измените свой вопрос, включив в него [mcve], который показывает ваш текущий подход TableCellEditor. Соответствующий пример показан [здесь] (http://stackoverflow.com/a/12352838/230513). – trashgod

ответ

3

Небольшой пример с двойными значениями в одном столбце. Эта версия использует 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); 
      } 
     }); 
    } 
} 

идет как:

Change a balance from negative to positive and vice versa

+0

Спасибо большое! Конечно, мне придется его модифицировать, но я понял, как это сделать. Еще раз спасибо! –

+1

Престижность внимания к модели/просмотр индекса. – trashgod

+0

согласен ........... – mKorbel