java - Coloring JTable row dynamicaly, row selection issue on moving row -


i facing issue jtable.

i doing is: moving table rows dynamically , changing color of rows dynamically. facing following issues:

  1. with moving rows, row selection not moving. so, problem is, user select row , something, meanwhile rows move , selected row other, , user operation getting performed on other row desired row.
  2. some time part row (few columns) getting changed color, time whole row getting colored.

so, want whole row colored dynamically, , row selection should move row moves.

somehow managed update color of whole row,

but still have issue of row selection.

below code:

import java.awt.borderlayout; import java.awt.color; import java.awt.component; import java.awt.dimension; import java.util.vector; import javax.swing.jcomponent; import javax.swing.jframe; import javax.swing.jscrollpane; import javax.swing.jtable; import javax.swing.uimanager; import javax.swing.plaf.nimbus.nimbuslookandfeel; import javax.swing.table.defaulttablemodel; import javax.swing.table.tablecellrenderer;  public class newclass extends jframe {      private jtable table;     private jscrollpane scrollpane;     private defaulttablemodel defaulttablemodel;      public newclass() {         setlocationbyplatform(true);         setlayout(new borderlayout());         setpreferredsize(new dimension(1000, 700));         settitle("table issues");         setdefaultcloseoperation(exit_on_close);          createtablemodel();         createtable();         table.setmodel(defaulttablemodel);          scrollpane = new jscrollpane(table);          getcontentpane().add(scrollpane, borderlayout.center);          pack();     }      private void createtable() {         table = new jtable() {              @override             public component preparerenderer(tablecellrenderer renderer, int row, int column) {                 component comp = super.preparerenderer(renderer, row, column);                 jcomponent jc = (jcomponent) comp;                 if (!isrowselected(row)) {                     int modelrow = convertrowindextomodel(row);                     int = integer.parseint((string) getmodel().getvalueat(modelrow, 2));                     if (i == 0) {                         jc.setbackground(color.orange);                     } else if (i == 1 || == 2) {                         jc.setbackground(color.yellow);                     } else if (i == 3) {                         jc.setbackground(color.green);                     } else {                         jc.setbackground(color.white);                     }                 }                 return comp;             }         };     }      private void createtablemodel() {         vector cols = new vector();         cols.add("1");         cols.add("2");         cols.add("3");         cols.add("4");         cols.add("5");          vector rows = new vector();          (int = 0; < 50; i++) {             vector row = new vector();             row.add((i + 1) + "");             row.add("b");             int r = (int) (math.random() * 5);             row.add(r + "");             row.add("d");             row.add("e");             rows.add(row);         }          defaulttablemodel = new defaulttablemodel(rows, cols) {              class[] types = new class[]{                 string.class, string.class, string.class, string.class, string.class             };              @override             public class getcolumnclass(int columnindex) {                 return types[columnindex];             }              @override             public boolean iscelleditable(int row, int column) {                 return false;             }         };     }      public static void main(string[] args) {         try {             uimanager.setlookandfeel(new nimbuslookandfeel());         } catch (exception e) {         }          final object lock = new object();         final newclass nc = new newclass();         nc.setvisible(true);          new thread(new runnable() {              public void run() {                 while (true) {                     try {                         thread.sleep(1000);                     } catch (exception e) {                     }                     synchronized (lock) {                         int = (int) (math.random() * 5);                         int row = (int) (math.random() * 50);                         int move = (int) (math.random() * 50);                          nc.defaulttablemodel.setvalueat(i + "", row, 2);                         nc.defaulttablemodel.moverow(row, row, move);                         nc.defaulttablemodel.setvalueat(i + "", row, 2);                     }                 }             }         }).start();          new thread(new runnable() {              public void run() {                 while (true) {                     try {                         thread.sleep(1000);                     } catch (exception e) {                     }                     synchronized (lock) {                         int = (int) (math.random() * 5);                         int row = (int) (math.random() * 50);                         int move = (int) (math.random() * 50);                          nc.defaulttablemodel.setvalueat(i + "", row, 2);                         nc.defaulttablemodel.moverow(row, row, move);                         nc.defaulttablemodel.setvalueat(i + "", row, 2);                     }                 }             }         }).start();          while (true) {             synchronized (lock) {                 int = (int) (math.random() * 5);                 int row = (int) (math.random() * 50);                 int move = (int) (math.random() * 50);                  nc.defaulttablemodel.setvalueat(i + "", row, 2);                 nc.defaulttablemodel.moverow(row, row, move);                 nc.defaulttablemodel.setvalueat(i + "", row, 2);                 if (i % 2 == 1) {                     try {                         thread.sleep(1000);                     } catch (exception e) {                     }                 }             }         }     } } 

in code, when select row, after movements in rows, selected row other, i.e. row selection not moving row moves.

please me on this.

i resolved issue of coloring rows, overridding setvalueat method of defaulttablemodel. overridden method is:

@override public void setvalueat(object avalue, int row, int column) {     vector rowvector = (vector)datavector.elementat(row);     rowvector.setelementat(avalue, column);     // update whole row instead of single cell     firetablerowsupdated(row, row); } 

the issue may due multiple threads doing heavily work, , edt may not getting time update whole row. setting value setvalueat method of defaulttablemodel, column coloring sure due fire of cell update event.

but still have issue of selection not moving row moves in table.

opening new thread row selection issue.


Comments

Popular posts from this blog

php - Why I am getting the Error "Commands out of sync; you can't run this command now" -

linux - Does gcc have any options to add version info in ELF binary file? -

java - Are there any classes that implement javax.persistence.Parameter<T>? -