java - JTable Nimbus Look and Feel - how to make it clear which cell has focus -


when editing data in jtable (nimbus l & f), user tabs cell cell, not obvious cell has focus. how can make clearer cell has focus? know there number of properties can set modify nimbus - know property want?

the screen shot below has 1 property set other default:

uimanager.put("table.showgrid", true); 

jtable screen shot

enter image description here

import java.awt.borderlayout; import java.awt.color; import java.awt.component; import java.awt.font; import java.awt.graphics; import java.util.arraylist; import java.util.list; import java.util.regex.pattern; import javax.swing.icon; import javax.swing.jcomponent; import javax.swing.jframe; import javax.swing.jscrollpane; import javax.swing.jtable; import javax.swing.rowsorter.sortkey; import javax.swing.sortorder; import javax.swing.swingutilities; import javax.swing.uimanager; import javax.swing.table.defaulttablecellrenderer; import javax.swing.table.tablecolumn; import javax.swing.table.tablemodel; import javax.swing.table.tablerowsorter;  public class imagechangedemo extends jframe {      private static final long serialversionuid = 1l;     private jtable table = new javax.swing.jtable();     private jtable table1 = new javax.swing.jtable();     private static icon ascendingsorticon;     private static icon descendingsorticon;      public static void main(string args[]) {         //comment out code below try in metal l&f         try {             (javax.swing.uimanager.lookandfeelinfo info : javax.swing.uimanager.getinstalledlookandfeels()) {                 if ("nimbus".equals(info.getname())) {                     javax.swing.uimanager.setlookandfeel(info.getclassname());                     ascendingsorticon = uimanager.getlookandfeeldefaults().geticon("table.ascendingsorticon");                     descendingsorticon = uimanager.getlookandfeeldefaults().geticon("table.descendingsorticon");                     //uimanager.getlookandfeeldefaults().put("table.ascendingsorticon", new bevelarrowicon(bevelarrowicon.up, false, false));                     //uimanager.getlookandfeeldefaults().put("table.descendingsorticon", new bevelarrowicon(bevelarrowicon.down, false, false));                     break;                 }             }         } catch (exception ex) {             ex.printstacktrace();         }         java.awt.eventqueue.invokelater(new runnable() {              @override             public void run() {                 new imagechangedemo().setvisible(true);             }         });     }      public imagechangedemo() {         setdefaultcloseoperation(javax.swing.windowconstants.exit_on_close);         jscrollpane pane = new javax.swing.jscrollpane();         //table.setautocreaterowsorter(true);         table.setmodel(new javax.swing.table.defaulttablemodel(                 new object[][]{                     {"a", "q", "h", "v"},                     {"b", "m", "l", "h"},                     {"d", "c", "a", "d"},                     {"j", "o", "y", "e"}                 },                 new string[]{                     "col 1", "col 2", "col 3", "col 4"                 }) {              private static final long serialversionuid = 1l;             class[] types = new class[]{                 string.class, string.class, string.class, string.class             };              @override             public class getcolumnclass(int columnindex) {                 return types[columnindex];             }         });         tablerowsorter<tablemodel> sorter = new tablerowsorter<tablemodel>(table.getmodel()) {              @override             public void togglesortorder(int column) {                 if (column >= 0 && column < getmodelwrapper().getcolumncount() && issortable(column)) {                     list<sortkey> keys = new arraylist<sortkey>(getsortkeys());                     if (!keys.isempty()) {                          sortkey sortkey = keys.get(0);                         if (sortkey.getcolumn() == column && sortkey.getsortorder() == sortorder.descending) {                             setsortkeys(null);                             return;                         }                     }                 }                 super.togglesortorder(column);             }         };         table.setrowsorter(sorter);         table.setpreferredscrollableviewportsize(table.getpreferredsize());         pane.setviewportview(table);         uimanager.getlookandfeeldefaults().put("table.ascendingsorticon", new bevelarrowicon(bevelarrowicon.up, false, false));         uimanager.getlookandfeeldefaults().put("table.descendingsorticon", new bevelarrowicon(bevelarrowicon.down, false, false));         swingutilities.updatecomponenttreeui(table);         add(pane, borderlayout.north);         jscrollpane pane1 = new javax.swing.jscrollpane();         //table.setautocreaterowsorter(true);         table1.setmodel(new javax.swing.table.defaulttablemodel(                 new object[][]{                     {"a", "q", "h", "v"},                     {"b", "m", "l", "h"},                     {"d", "c", "a", "d"},                     {"j", "o", "y", "e"}                 },                 new string[]{                     "col 1", "col 2", "col 3", "col 4"                 }) {              private static final long serialversionuid = 1l;             class[] types = new class[]{                 string.class, string.class, string.class, string.class             };              @override             public class getcolumnclass(int columnindex) {                 return types[columnindex];             }         });         table1.setrowsorter(sorter);         table1.setpreferredscrollableviewportsize(table1.getpreferredsize());         pane1.setviewportview(table1);         add(pane1, borderlayout.south);          (int = 0; < table1.getcolumncount(); i++) {             rowcolorrenderer rowrenderer = new rowcolorrenderer(i);             tablecolumn column = table1.getcolumnmodel().getcolumn(i);             column.setcellrenderer(rowrenderer);         }         pack();     }      private class rowcolorrenderer extends defaulttablecellrenderer {          private static final long serialversionuid = 1l;         private int colno = 0;          rowcolorrenderer(int col) {             colno = col;         }          @override         public component gettablecellrenderercomponent(jtable table, object value,                 boolean isselected, boolean hasfocus, int row, int column) {             component comp = super.gettablecellrenderercomponent(table, value,                     isselected, hasfocus, row, column);             jcomponent jc = (jcomponent) comp;             if (!isselected) {                 if (table.getvalueat(row, colno) != null) {                     string str = table.getvalueat(row, colno).tostring();                     if (!str.isempty()) {                         if (pattern.compile("\\d").matcher(str).find()) {                             if (((pattern.compile("[02468]").matcher(str).find()))                                     && (!(pattern.compile("[13579]").matcher(str).find()))) {                                 setforeground(color.magenta);                                 setbackground(color.orange);                             } else if ((!(pattern.compile("[02468]").matcher(str).find()))                                     && ((pattern.compile("[13579]").matcher(str).find()))) {                                 setforeground(color.blue);                                 setbackground(color.yellow);                             } else if (((pattern.compile("[02468]").matcher(str).find()))                                     && ((pattern.compile("[13579]").matcher(str).find()))) {                                 setforeground(color.red);                                 setbackground(color.cyan);                             }                             setfont(new font("serif", font.bold, 12));                             sethorizontalalignment(center);                         } else {                             setbackground(table.getbackground());                             setforeground(table.getforeground());                             setfont(new font("serif", font.plain, 8));                             sethorizontalalignment(center);                         }                     }                 }             } else {                 if (hasfocus) {                     setfont(new font("serif", font.bold, 12));                     setforeground(color.magenta);                     setbackground(color.orange);                 }             }             return this;         }     }      static class bevelarrowicon implements icon {          public static final int = 0;         // direction         public static final int down = 1;         private static final int default_size = 11;         private color edge1;         private color edge2;         private color fill;         private int size;         private int direction;          public bevelarrowicon(int direction, boolean israisedview, boolean ispressedview) {             if (israisedview) {                 if (ispressedview) {                     init(uimanager.getcolor("controllthighlight"), uimanager.getcolor("controldkshadow"), uimanager.getcolor("controlshadow"), default_size, direction);                 } else {                     init(uimanager.getcolor("controlhighlight"), uimanager.getcolor("controlshadow"), uimanager.getcolor("control"), default_size, direction);                 }             } else {                 if (ispressedview) {                     init(uimanager.getcolor("controldkshadow"), uimanager.getcolor("controllthighlight"), uimanager.getcolor("controlshadow"), default_size, direction);                 } else {                     init(uimanager.getcolor("controlshadow"), uimanager.getcolor("controlhighlight"), uimanager.getcolor("control"), default_size, direction);                 }             }         }          public bevelarrowicon(color edge1, color edge2, color fill, int size, int direction) {             init(edge1, edge2, fill, size, direction);         }          @override         public void painticon(component c, graphics g, int x, int y) {             switch (direction) {                 case down:                     drawdownarrow(g, x, y);                     break;                 case up:                     drawuparrow(g, x, y);                     break;             }         }          @override         public int geticonwidth() {             return size;         }          @override         public int geticonheight() {             return size;         }          private void init(color edge1, color edge2, color fill, int size, int direction) {             edge1 = color.red;             edge2 = color.blue;             this.edge1 = edge1;             this.edge2 = edge2;             this.fill = fill;             this.size = size;             this.direction = direction;         }          private void drawdownarrow(graphics g, int xo, int yo) {             g.setcolor(edge1);             g.drawline(xo, yo, xo + size - 1, yo);             g.drawline(xo, yo + 1, xo + size - 3, yo + 1);             g.setcolor(edge2);             g.drawline(xo + size - 2, yo + 1, xo + size - 1, yo + 1);             int x = xo + 1;             int y = yo + 2;             int dx = size - 6;             while (y + 1 < yo + size) {                 g.setcolor(edge1);                 g.drawline(x, y, x + 1, y);                 g.drawline(x, y + 1, x + 1, y + 1);                 if (0 < dx) {                     g.setcolor(fill);                     g.drawline(x + 2, y, x + 1 + dx, y);                     g.drawline(x + 2, y + 1, x + 1 + dx, y + 1);                 }                 g.setcolor(edge2);                 g.drawline(x + dx + 2, y, x + dx + 3, y);                 g.drawline(x + dx + 2, y + 1, x + dx + 3, y + 1);                 x += 1;                 y += 2;                 dx -= 2;             }             g.setcolor(edge1);             g.drawline(xo + (size / 2), yo + size - 1, xo + (size / 2), yo + size - 1);         }          private void drawuparrow(graphics g, int xo, int yo) {             g.setcolor(edge1);             int x = xo + (size / 2);             g.drawline(x, yo, x, yo);             x--;             int y = yo + 1;             int dx = 0;             while (y + 3 < yo + size) {                 g.setcolor(edge1);                 g.drawline(x, y, x + 1, y);                 g.drawline(x, y + 1, x + 1, y + 1);                 if (0 < dx) {                     g.setcolor(fill);                     g.drawline(x + 2, y, x + 1 + dx, y);                     g.drawline(x + 2, y + 1, x + 1 + dx, y + 1);                 }                 g.setcolor(edge2);                 g.drawline(x + dx + 2, y, x + dx + 3, y);                 g.drawline(x + dx + 2, y + 1, x + dx + 3, y + 1);                 x -= 1;                 y += 2;                 dx += 2;             }             g.setcolor(edge1);             g.drawline(xo, yo + size - 3, xo + 1, yo + size - 3);             g.setcolor(edge2);             g.drawline(xo + 2, yo + size - 2, xo + size - 1, yo + size - 2);             g.drawline(xo, yo + size - 1, xo + size, yo + size - 1);         }     } } 

Comments

Popular posts from this blog

c# - SVN Error : "svnadmin: E205000: Too many arguments" -

c# - Copy ObservableCollection to another ObservableCollection -

All overlapping substrings matching a java regex -