java - TableModel not called in a JScrollPane containing a JTable -


i having unexpected behavior java gui. want create jscrollpane containing jtable add jscrollpane frame.

here code :

public class urlsscrollpanel extends jscrollpane { private static final long serialversionuid = 1l;  public urlsscrollpanel() {      //setup urls , collections     arraylist<url> urls = url.getall();     arraylist<collection> collections = new arraylist<>();     for(url url : urls) collections.add(new collection(url));      //table     string[] columns = {                     "database",         "status",         "consumption",         "last snapshot date",         "last message",         "details",         "stop collect"     };        abstracttablemodel datamodel = new abstracttablemodel() {         private static final long serialversionuid = 1l;          @override         public object getvalueat(int rowindex, int columnindex) {             system.out.printf("row: %d, column: %d \n", rowindex, columnindex); //is never called.             url url = urls.get(rowindex);             collection collection = collections.get(rowindex);              arraylist<message> lastmessages = collection.getlastsnapshot().getmessages();             message lastmessage = lastmessages.get(lastmessages.size() - 1);              if(columnindex == 0) return url.tostring();             if(columnindex == 1) return collection.getstatus();              if(columnindex == 2) return consumptionchart.getchartpanel(collection);             if(columnindex == 3) return collection.getlastsnapshot().getdate();             if(columnindex == 4) return string.format("[ %s ] %s", lastmessage.getdate(), lastmessage.getbody());              return "comming soon.";         }          @override         public int getrowcount() {             return urls.size();         }          @override         public int getcolumncount() {             return columns.length;         }          @override         public boolean iscelleditable(int row, int column) {             return false;         }     };     jtable table = new jtable(datamodel);     add(table);     setbackground(color.red);     setsize(500, 500); } } 

and here how call :

public static void main(string[] args) {             jframe frame = new jframe();     frame.setvisible(true);     frame.setresizable(true);     frame.setdefaultcloseoperation(jframe.dispose_on_close);     frame.setextendedstate(jframe.maximized_both );     frame.setlocationrelativeto(null);     urlsscrollpanel panel = new urlsscrollpanel();     frame.add(panel, borderlayout.center);     swingutilities.updatecomponenttreeui(frame); } 

the result red square blinking @ top left of frame disappearing immediately. datamodel seems never called.

any in doing wrong appreciated, time!

don't extend jscrollpane. instead, use table construct jscrollpane:

frame.add(new jscrollpane(table), borderlayout.center); 

the approach described here; complete example shown here; alternative approach using setviewportview() examined here.

are these 2 not similar?

jscrollpane panel = new jscrollpane(); panel.add(table); … jscrollpane panel = new jscrollpane(table); 

no. shown in how scroll pane works, first formulation adds table directly jscrollpane, replacing jviewport component occupies central position in scrollpanelayout , have been used display table. second formulation invokes setviewportview(table) internally, tells scroll pane's jviewport component display.


Comments

Popular posts from this blog

Sass watch command compiles .scss files before full sftp upload -

filehandler - java open files not cleaned, even when the process is killed -

gridview - Yii2 DataPorivider $totalSum for a column -