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);
you have @ renderer concept,
by defaul works nimbus , feel,
some issue jbuttons components (jcheckbox e.i.), few times answered or solved on forum
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
Post a Comment