求助:Frame中加入JTable为何显示有问题 为什么在Frame中加入JTable后,运行时需点击控件所在位置才能显示表格?且若有其它窗口盖住JTable后再移开也会无法还原显示?是不是JTable一定要放在JFrame中,还是哪个参数没设置好啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 JTable table = new JTable(); JScrollPane jspane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); jspane.setViewportView(table);要先把table放到JScrollPane 上,然后把JScrollPane 放到Frame 上就可以了。。 public void start()throws SQLException,ClassNotFoundException{ Statement stmt; ResultSet rs; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url="jdbc:odbc:not"; Connection con=DriverManager.getConnection(url); stmt=con.createStatement(); rs=stmt.executeQuery("select * from fen"); ResultSetMetaData meta=rs.getMetaData(); int cols=meta.getColumnCount(); System.out.println(cols); titles=new String[cols]; for(int i=0;i<cols;i++){ titles[i]=meta.getColumnName(i+1); } records.removeAllElements(); while(rs.next()){ Vector rec_vector=new Vector(); for(int i=0;i<titles.length;i++){ rec_vector.addElement(rs.getObject(i+1).toString()); } records.addElement(rec_vector); } table=new JTable(tm); table.setToolTipText("显示全部查询结果"); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); table.setCellSelectionEnabled(false); table.setShowVerticalLines(true); table.setShowHorizontalLines(true); scrollpane=new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); scrollpane.setViewportView(table); add(scrollpane); tm.fireTableStructureChanged(); scrollpane.setLocation(200,200); scrollpane.setSize(350,300); scrollpane.setVisible(true); }这是其中一个函数,tm等在其它函数中已经定义了另外我试了,如果在Frame中加入JButton控件的话,也会出现以上问题,是不是Swing控件的显示与AWT的不一样啊??? 帮楼主顶一下。也向楼主请教一下,能否把定义tm的代码也贴出来,我想从你哲学一下怎么用vector,我不知道你的vector和tm是怎么联系的,请赐教 public void init(){ records=new Vector(); tm=new AbstractTableModel(){ public int getColumnCount(){ return titles.length; } public int getRowCount(){ return records.size(); } public Object getValueAt(int row,int column){ if(!records.isEmpty()) return ((Vector)records.elementAt(row)).elementAt(column); else return null; } public String getColumnName(int column){ return titles[column]; } public void setValueAt(Object value,int row,int column){ } public Class getColumnClass(int c){ return getValueAt(0,c).getClass(); } public boolean isCellEditable(int row,int column){ return false; } }; } scrollpane.setViewportView(table);改成:add呢?? 我用的是jScrollPane.getViewport().add(table);可以显示的,但是这样设计的表格,好像不容易实现对单元格内的内容修改的操作,你知道怎么实现吗? 我也是刚使用这个表格,不太清楚怎么修改,查查JTable的类库吧,应该会有相关函数的我这儿为什么还是显示不正常?郁闷啊,拖动其它窗口的时候就好像橡皮一样把这个控件擦去了,要点击后才会出现。是不是有显示函数没写对啊? 偶直接就是scrollpane=new JScrollPane(table); scrollpane.setVisible(true); add(scrollpane);没有遇到过同样的问题....学习学习 新手求助啊!!!!!!!! 打jar包的问题 彩票摇号系统`如何避免出现重复号? 自认为经典的题目 散分 一道CoreJava笔试题目,求解。 关于public类的问题 关于eclipse的安装,谢谢 JTable的编辑器问题 关于"造型" 谁知道JDBC中thin和oci8这两个driver有什么区别,server_side driver怎么用? 急!请教关于awt中实现菜单中一组单选按钮(RadioButton)的用法?小弟明天急用~~~~ 怎样引进Struts工具,谢谢!
JScrollPane jspane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jspane.setViewportView(table);
要先把table放到JScrollPane 上,然后把JScrollPane 放到Frame 上就可以了。。
Statement stmt;
ResultSet rs; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url="jdbc:odbc:not";
Connection con=DriverManager.getConnection(url);
stmt=con.createStatement();
rs=stmt.executeQuery("select * from fen");
ResultSetMetaData meta=rs.getMetaData(); int cols=meta.getColumnCount();
System.out.println(cols);
titles=new String[cols];
for(int i=0;i<cols;i++){
titles[i]=meta.getColumnName(i+1);
} records.removeAllElements();
while(rs.next()){
Vector rec_vector=new Vector();
for(int i=0;i<titles.length;i++){
rec_vector.addElement(rs.getObject(i+1).toString());
}
records.addElement(rec_vector);
}
table=new JTable(tm);
table.setToolTipText("显示全部查询结果");
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setCellSelectionEnabled(false);
table.setShowVerticalLines(true);
table.setShowHorizontalLines(true);
scrollpane=new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollpane.setViewportView(table);
add(scrollpane); tm.fireTableStructureChanged();
scrollpane.setLocation(200,200);
scrollpane.setSize(350,300);
scrollpane.setVisible(true); }这是其中一个函数,tm等在其它函数中已经定义了
另外我试了,如果在Frame中加入JButton控件的话,也会出现以上问题,是不是Swing控件的显示与AWT的不一样啊???
也向楼主请教一下,能否把定义tm的代码也贴出来,我想从你哲学一下怎么用vector,我不知道你的vector和tm是怎么联系的,请赐教
records=new Vector();
tm=new AbstractTableModel(){
public int getColumnCount(){
return titles.length;
}
public int getRowCount(){
return records.size();
}
public Object getValueAt(int row,int column){
if(!records.isEmpty())
return ((Vector)records.elementAt(row)).elementAt(column);
else
return null;
}
public String getColumnName(int column){
return titles[column];
}
public void setValueAt(Object value,int row,int column){ }
public Class getColumnClass(int c){
return getValueAt(0,c).getClass();
}
public boolean isCellEditable(int row,int column){
return false;
}
}; }
改成:add呢??
我这儿为什么还是显示不正常?郁闷啊,拖动其它窗口的时候就好像橡皮一样把这个控件擦去了,要点击后才会出现。
是不是有显示函数没写对啊?
没有遇到过同样的问题....
学习学习