Java 单击JMenuItem时显示一个空Jframe

Java 单击JMenuItem时显示一个空Jframe,java,swing,jtable,actionlistener,jmenuitem,Java,Swing,Jtable,Actionlistener,Jmenuitem,我正在编写一个JavaSwing应用程序,它从文本字段收集数据并将其存储在数据库中。我有一个JmenuItem,我想用它来显示数据库中的数据。我有一个从数据库收集数据并将数据插入jtable的类。该类扩展了jframe。现在我遇到的问题是从jmenuitem执行该类。当我单击jmenuitem时,它会显示一个没有表的空jframe 下面是使用jtable的类的代码。这门课是报告课 public class Reports2 extends JFrame { Connection con = n

我正在编写一个JavaSwing应用程序,它从文本字段收集数据并将其存储在数据库中。我有一个JmenuItem,我想用它来显示数据库中的数据。我有一个从数据库收集数据并将数据插入jtable的类。该类扩展了jframe。现在我遇到的问题是从jmenuitem执行该类。当我单击jmenuitem时,它会显示一个没有表的空jframe

下面是使用jtable的类的代码。这门课是报告课

 public class Reports2 extends JFrame {
Connection con = null;
Statement st;
ResultSet rs;
public static void main(String[]args) throws Exception {


    try {

        Connection con= null ;
        Statement st;
        ResultSet rs;
        String url = "jdbc:mysql://localhost:3306/first";
    String user = "root";
    String password = "Admin123";
    try{
    con = DriverManager.getConnection(url,user,password);

        st = con.createStatement();
        String qry = "SELECT * FROM request";
        rs = st.executeQuery(qry);
        JTable table = new JTable(buildTableModel(rs));
        JFrame frame = new JFrame("Reports");
        frame.setSize(800, 700);
        frame.add(table);
        frame.setVisible(true);



    } catch (SQLException ex) {
        Logger.getLogger(Reports2.class.getName()).log(Level.SEVERE, null, ex);
    }
}catch(Exception e){


}}


public static DefaultTableModel buildTableModel(ResultSet rs) throws Exception{
ResultSetMetaData  metaData =  rs.getMetaData();
    Vector<String> columnNames = new Vector <String>();
    int columnCount = metaData.getColumnCount();
    for(int column = 1; column<=columnCount;column++){
    columnNames.add(metaData.getColumnName(column));
    }
    Vector<Vector<Object>> data = new Vector<Vector<Object>>();
    while(rs.next()){
        Vector<Object> vector = new Vector<Object>();
        for(int columnIndex =1;columnIndex<= columnCount;columnIndex++){
        vector.add(rs.getObject(columnIndex));
        }
        data.add(vector);
    }
    return new DefaultTableModel(data, columnNames);
}
  • Reports2
    类中不需要
    main
    方法。您的主框架类已经有一个要从中启动的
    main
    。取出
    main
    方法,将该
    main
    中的所有内容包装到
    Report2
    构造函数中

  • 您的
    Reports2
    类已经是一个
    JFrame
    ,但是您正在创建另一个
    JFrame
    。不要那样做。相反,只需将
    添加到类
    JFrame

    JTable table = new JTable(buildTableModel(rs));
    //JFrame frame = new JFrame("Reports");         <--- take this out
    //frame.setSize(800, 700);                      <--- don't set size, just pack
    setTitle("Reports");                            <--- set title
    add(new JScrollPane(table));                    <--- add to scrollpane
    pack();                                         <--- pack
    setVisible(true);                               <--- set visible
    
我运行了它,使用上面提到的修复程序,它工作得很好。如果您的SQL是正确的,那么它也应该为您运行


旁注:永远不要吞下你的例外

} catch (Exception ex) {

}
放一些有意义的东西,让您可以看到抛出了哪些异常(如果有的话)

} catch (Exception ex) {
    ex.printStackTrace();
}

<强>也<>强>我将考虑使用<代码> jCalue(而不是第二个<代码> jFrase>代码>),因为您可以控制它的模态。创建

JDialog
和创建
JFrame
一样简单。这几乎是完全相同的过程

} catch (Exception ex) {

}
} catch (Exception ex) {
    ex.printStackTrace();
}