在线等! 急!-能编译能运行!就是JtableI不显示!(求教高手!)做出给50分!不胜感激!!高手指一下哪错了??import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import java.lang.*;
import java.util.*;
import javax.swing.table.DefaultTableModel;
public class JF_view_syset_grade1 extends JFrame {
    private JFrame frame;
    private JLabel label1,label2;
    private JButton button1,button2,button3,button4;
    private JPanel panel1,panel2;
    private JTextField textField1,textField2;
    private JSplitPane splitpane;
    private JScrollPane scrollpane;
    public JTable table ;
    private JPanel panel;
    public PreparedStatement pstmt;
    public ResultSet rs;
    public DefaultTableModel dtm;
    Vector<String> title = new Vector<String>();
    public static final int WIDTH=380;
    public static final int HEIGHT=300;
    public void init() throws Exception {
       JFrame frame = new JFrame("年级信息设置");
       frame.setSize(WIDTH,HEIGHT);
       frame.setResizable(false);
       frame.setLocation(300,150);       textField1 = new JTextField();
       textField2 = new JTextField();
       label1 = new JLabel("年级编号:");
       label2 = new JLabel("年级名称:");
       panel1 = new JPanel();
       panel1.setLayout(new GridLayout(2,2));       scrollpane = new JScrollPane();
       scrollpane.getViewport().add(table);
       splitpane = new JSplitPane();
       splitpane.setOrientation(splitpane.VERTICAL_SPLIT);
       splitpane.add(scrollpane,splitpane.TOP);
       splitpane.add(panel1,splitpane.BOTTOM);
       panel1.add(label1);
       panel1.add(textField1);
       panel1.add(label2);
       panel1.add(textField2);
       splitpane.setDividerLocation(164);//设置分隔条的位置
       button1 = new JButton("删除");
       button2 = new JButton("添加");
       button3 = new JButton("存盘");
       button4 = new JButton("退出");
       panel2 = new JPanel();
       panel2.setLayout(new FlowLayout(FlowLayout.RIGHT));
       panel2.add(button1);
       panel2.add(button2);
       panel2.add(button3);
       panel2.add(button4);
       panel = new JPanel();
       panel.setLayout(new BorderLayout());
       panel.add(splitpane,BorderLayout.CENTER);
       frame.add(panel,BorderLayout.CENTER);
       frame.add(panel2,BorderLayout.SOUTH);
       buildTable();
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setVisible(true);     }
    public void buildTable(){
    String sql= "select * from user";
    try{       String strurl =
             "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=student.mdb";
         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
         Connection con = DriverManager.getConnection(strurl);
         Statement stmt = con.createStatement();      pstmt=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);      rs=pstmt.executeQuery();
      ResultSetMetaData dbmd=rs.getMetaData();     for(int i=1;i<=dbmd.getColumnCount();i++){
      title.addElement(dbmd.getColumnName(i));
         dtm=new DefaultTableModel(null,title);
         table=new JTable(dtm);
         initTable();
         table.setRowHeight(24);
      }
        }catch(Exception e){e.printStackTrace();dispose();}
    }
    public void initTable(){
       dtm.setRowCount(0);
       try{
          rs.beforeFirst();
          while(rs.next()){           Vector<String> v1= new Vector<String>();            for(int i=1;i<=title.size();i++)
            v1.addElement(rs.getString(i));
            dtm.addRow(v1);
          }
           }
       catch(SQLException e){e.printStackTrace();}
       dtm.fireTableStructureChanged();
       }
     public JF_view_syset_grade1(){
      try{
         init();
      }
      catch(Exception e){
      e.printStackTrace();
      }
    }
   public static void main(String[] args){
      new JF_view_syset_grade1();   }}

解决方案 »

  1.   

    把 frame.setVisible(true); 
    改成this.setVisible(true) ;  看看行不行
      

  2.   

    楼主啊,你的程序主类是一个JFrame类,那它的构造方法呢?!Java应用程序需要窗口的构造方法来产生窗口对象的,而需要init方法的是Java Applet程序,你把这两种情况混淆了了。在Applet中,init方法是在浏览器加载网页的时候自动执行,而你为JFrame类定义了一个init方法,除非显式调用它,否则它不起任何作用。而你没有了构造方法,在main方法里,只能调用JFrame类的默认的无参数构造方法来创建对象,生成一个空的窗口,啥东西不会有的阿!改正办法:取消你的init方法,为JF_view_syset_grade1定义一个构造方法,把该做的事情都放到构造方法里去就可以了。
      

  3.   

    帮你改JTable实在有点麻烦,因为也没有你的数据库.给你个JTable的例子吧,希望对你有帮助.import javax.swing.*;
    import java.sql.*;public class Sample_16_3 extends JFrame{

    Sample_16_3(){
        try{
       // String[] colHeads = { "name", "Phone", "City" };
          String[] colHeads={"au_lname","au_fname","phone"}; Connection con; 
    Statement stmt; 
    ResultSet rs;  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    String url="jdbc:odbc:pubs"; 
    con=DriverManager.getConnection(url,"sa","");
    stmt = con.createStatement();  rs = stmt.executeQuery("SELECT count(*) as au_count from authors");
    rs.next();
    int iCount=rs.getInt("au_count");

        // 定义表格元素内容
        Object[][] data = new Object[iCount][];
        int i=0;
    rs = stmt.executeQuery("SELECT au_lname,au_fname,phone from authors"); 
    while (rs.next()) 

    data[i]=new Object[3];
    //可使用索引
    data[i][0]= rs.getString(1);
    data[i][1]= rs.getString(2);
    data[i][2]= rs.getString(3);
    //也可使用字段名
    //data[i][0]=rs.getString("au_fname");
    //data[i][1]= rs.getString("Phone");
    //data[i][2]= rs.getString("City");
    i++;

        
        JTable table = new JTable(data, colHeads);
        JScrollPane jsp = new JScrollPane(table);
        getContentPane().add(jsp);
        }catch(Exception e){
         System.out.println(e);
        
        }
    } public static void main(String[] args) {
    Sample_16_3 f2=new Sample_16_3();
    f2.setSize(400,200);
    f2.setVisible(true);
    }
    }