java - Change background color of one cell in JTable -


possible duplicate:
changing swing jtable cell colors

i have developed swing application shows jtable. want when user modify cell value, cell modified change color.

this code run when user modify cell:

this.mytable.getcolumnmodel().getcolumn(column).setcellrenderer(new statuscolumncellrenderer());  

and code of cell render class:

public class statuscolumncellrenderer extends defaulttablecellrenderer {      @override     public component gettablecellrenderercomponent(jtable table, object value, boolean isselected, boolean hasfocus, int row, int col) {          //cells default rendered jlabel.         jlabel l = (jlabel) super.gettablecellrenderercomponent(table, value, isselected, hasfocus, row, col);          //get status current row.         tablemodellotti tablemodel = (tablemodellotti) table.getmodel();          if(isselected)             l.setbackground(color.green);          //return jlabel renders cell.         return l;     } } 

you'll need custom renderer display green color when cell marked modified in model.

you'll need custom editor set model's modified state in implementation of stopcellediting(), mentioned here.

a related example of custom renderer , editor shown here.

addendum: here's example of approach described.

inage

import java.awt.color; import java.awt.component; import java.awt.eventqueue; import java.util.arraylist; import java.util.list; import javax.swing.defaultcelleditor; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.jtable; import javax.swing.jtextfield; import javax.swing.table.abstracttablemodel; import javax.swing.table.defaulttablecellrenderer;  /**  * @see https://stackoverflow.com/a/12352838/230513  */ public class modifiedcells extends jpanel {      public modifiedcells() {         final mymodel model = new mymodel();         jtable table = new jtable(model);         table.setdefaultrenderer(string.class, new myrenderer());         table.setdefaulteditor(string.class, new myeditor(table));         this.add(table);     }      private static class myrenderer extends defaulttablecellrenderer {          color backgroundcolor = getbackground();          @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);             mymodel model = (mymodel) table.getmodel();             if (model.getstate(row)) {                 c.setbackground(color.green.darker());             } else if (!isselected) {                 c.setbackground(backgroundcolor);             }             return c;         }     }      private static class myeditor extends defaultcelleditor {          private jtable table;         private mymodel model;          public myeditor(jtable table) {             super(new jtextfield());             this.table = table;             this.model = (mymodel) table.getmodel();         }          @override         public boolean stopcellediting() {             model.setstate(table.geteditingrow(), true);             return super.stopcellediting();         }     }      private static class mymodel extends abstracttablemodel {          private final list<row> list = new arraylist<row>();          public mymodel() {             list.add(new row("one", true));             list.add(new row("two", false));             list.add(new row("three", false));         }          public boolean getstate(int row) {             return list.get(row).state.booleanvalue();         }          public void setstate(int row, boolean state) {             list.get(row).state = state;         }          @override         public int getrowcount() {             return list.size();         }          @override         public int getcolumncount() {             return 1;         }          @override         public object getvalueat(int row, int col) {             return list.get(row).name;         }          @override         public void setvalueat(object avalue, int row, int col) {             list.get(row).name = (string) avalue;             firetablecellupdated(row, col);         }          @override         public boolean iscelleditable(int rowindex, int columnindex) {             return true;         }          @override         public class<?> getcolumnclass(int columnindex) {             return string.class;         }          private static class row {              private string name;             private boolean state;              public row(string name, boolean state) {                 this.name = name;                 this.state = state;             }         }     }      private void display() {         jframe f = new jframe("modifiedcells");         f.setdefaultcloseoperation(jframe.exit_on_close);         f.add(this);         f.pack();         f.setlocationrelativeto(null);         f.setvisible(true);     }      public static void main(string[] args) {         eventqueue.invokelater(new runnable() {              @override             public void run() {                 new modifiedcells().display();             }         });     } } 

Popular posts from this blog

node.js - How do I prevent MongoDB replica set from querying the primary? -

c# - Randomly pick a specific int from a 2D Array -

php - Angularjs http.delete is not working after deploying project on server -