How to apply Font color to specific cells on JTable that uses DefaultTableModel

14,897

Solution 1

  • easiest of ways is look at prepareRenderer(), best of all is @camickr Table Row Rendering

  • JTable is View, based on TableModel, in most cases you have to convert the view against model converXxxToXxx from inside of prepareRenderer or getTableCellRendererComponent, because JTable could be sorted of filtered

  • methods

code

public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);

returns access to the specific cell in JTable - (TableCellRenderer renderer, int row, int column)

Solution 2

Use DefaultTableCellRenderer, then you can use setForeground() and setBackground().

refer to the page.. http://www.jyloo.com/news/?pubId=1282737395000

or see this example...

/*This is the raw code I have written.*/ 
JTable Tbl=new JTable(2,2){ 
    DefaultTableCellRenderer colortext=new DefaultTableCellRenderer();
    {
        colortext.setForeground(Color.RED);
    }
    @Override
    public TableCellRenderer getCellRenderer(int arg0, int arg1) {
        return colortext;
    }
};
Share:
14,897
Mr. Xymon
Author by

Mr. Xymon

I'm a former I.T. college instructor (2005 - 2011). Now I currently work as Software Engineer at Infor. I recently started a small java tutorial on Google Sites intended for students... https://sites.google.com/site/teachmemrxymon/

Updated on November 21, 2022

Comments

  • Mr. Xymon
    Mr. Xymon over 1 year

    I'm trying to create a simple To-Do list Java application connected to MS Access and I used JTable and DefaultTableModel to display the list. I want to mark completed tasks by changing its color when I click on a button. I have a boolean field named 'completed' that serves as indicator.

    String header[] = {"priority", "task"};
    String data[][];
    DefaultTableModel model = new DefaultTableModel(data, header);
    JTable table = new JTable(model);
    
    // to be replaced with code that affects only specific cells not the whole table
    table.setFont(customFont);
    

    I already have a Font object that I called customFont, which is ready to be applied. My question is, how do I apply it only to specific cells where completed==true.

    Sample codes would be much appreciated.

  • StanislavL
    StanislavL about 12 years
    It's not table method. See public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
  • Mr. Xymon
    Mr. Xymon about 12 years
    @mKorbel, thanks for giving me a good idea and the links. I guess that's what I'm looking for... but I might still have questions soon since I'm a newbie to cell rendering.
  • mKorbel
    mKorbel about 12 years
    @Mr. Xymon in most cases the easy job, but before any rendering, you have to check (if - else) row and column exist, then very simple job