java - JTable header not showing still -
i have looked , found many people weren't putting table scrollpane. though nest table scrollpane frame still fails show header. there else i'm missing ? thanks
public class gui extends jframe { abstracttablemodel model; jtable table; public void start(abstracttablemodel model) { this.model = model; table=new jtable(model){ @override public boolean iscelleditable(int arg0, int arg1) { return false; } }; table.setautoresizemode(jtable.auto_resize_off); tablecolumn column = null; (int = 0; < model.getcolumncount(); i++) { column = table.getcolumnmodel().getcolumn(i); column.setpreferredwidth(120); column.setmaxwidth(300); column.setminwidth(50); } jscrollpane pane = new jscrollpane(table); pane.setpreferredsize(new dimension(900,900)); add(pane); setlayout(new flowlayout()); setvisible(true); setdefaultcloseoperation(exit_on_close); pack(); }
based on code , having add missing functionality, code works...
import java.awt.borderlayout; import java.awt.dimension; import java.awt.eventqueue; import java.awt.flowlayout; import javax.swing.jframe; import static javax.swing.jframe.exit_on_close; import javax.swing.jscrollpane; import javax.swing.jtable; import javax.swing.uimanager; import javax.swing.unsupportedlookandfeelexception; import javax.swing.table.abstracttablemodel; import javax.swing.table.defaulttablemodel; import javax.swing.table.tablecolumn; public class gui extends jframe { public static void main(string[] args) { eventqueue.invokelater(new runnable() { @override public void run() { try { uimanager.setlookandfeel(uimanager.getsystemlookandfeelclassname()); } catch (classnotfoundexception | instantiationexception | illegalaccessexception | unsupportedlookandfeelexception ex) { } gui frame = new gui(); frame.start(new defaulttablemodel(new object[]{"a", "b", "c"}, 10)); } }); } abstracttablemodel model; jtable table; public void start(abstracttablemodel model) { this.model = model; table = new jtable(model) { @override public boolean iscelleditable(int arg0, int arg1) { return false; } }; table.setautoresizemode(jtable.auto_resize_off); tablecolumn column = null; (int = 0; < model.getcolumncount(); i++) { column = table.getcolumnmodel().getcolumn(i); column.setpreferredwidth(120); column.setmaxwidth(300); column.setminwidth(50); } jscrollpane pane = new jscrollpane(table); pane.setpreferredsize(new dimension(900, 900)); add(pane); setlayout(new flowlayout()); setvisible(true); setdefaultcloseoperation(exit_on_close); pack(); } }
this leads 2 broad assumptions...
- you're
tablemodel
doesn't have columns - you're
tablemodel
doesn't have column names...
for example, tablemodel
no column names...
personally...
- i wouldn't use
flowlayout
this,borderlayout
give better results pack
frame before make visible- set layout before add components sometimes, things can messed up...
for example...
setlayout(new flowlayout()); // i'd use `borderlayout` add(pane); setdefaultcloseoperation(exit_on_close); pack(); setvisible(true);
Comments
Post a Comment