与SQL连接的JTable无法在Eclipse中看到结果

时间:2018-11-03 23:23:02

标签: java swing

所以这是我的问题,一切正常,我只是无法在showing方法中看到结果(我尝试了System.out.print(“ done”),并且一切正常,只是表没有向我显示结果任何帮助谢谢,这是我的代码 我认为桌子有问题,我需要在桌子上做些改变吗? PS:添加方法起作用,所以问题出在表和其他方法上!

   public class Window extends JPanel{



       JButton Reload = new JButton("Realod");

       JButton Valider = new JButton("ADD");

       Label label  = new Label("Item : ");

       JTextField TFname = new JTextField();

       JTable table = new JTable();

       private Connection con=null;

       private PreparedStatement pst = null;

       public Window() throws SQLException {


           this.setLayout(null);

           this.add(table);

           this.add(Valider);

           this.add(label);

           this.add(TFname);

           this.add(Reload);

           label.setBounds(10,10,80,20);

           TFname.setBounds(100, 10, 80,30);

           Valider.setBounds(100, 40, 80,30);

           Reload.setBounds(160,150, 80,30);

           label.setFont(new Font("ARIAL",2,26));

           table.setBounds(50,190,300,250);

           con = Driver.connect();

           Adding();

           Showing();
}

private void Adding() throws SQLException {
    Valider.addActionListener(S->{
    if(!TFname.getText().isEmpty()) {
        String requette = "insert into Test(Nom)Values(?)";
        String Name = TFname.getText();
        try {
            pst=con.prepareStatement(requette);
            pst.setString(1, Name);
            int i = pst.executeUpdate();
            if(i==1) {
                System.out.println("ADDIND IS DONE");
            }else {
                System.out.println("Error in ADDING");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                pst.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } 

        }else {
            System.out.println("ALL FIELD MUST BE FIELED");
    }


    });
}
public ArrayList<User>userList() throws SQLException{
    ArrayList<User>userList = new ArrayList<>();
    String query="Select * from Test";
    Statement st = con.createStatement();
    ResultSet rs = st.executeQuery(query);
    User user;
    while(rs.next()) {
        user=new User(rs.getString("Nom"));
        userList.add(user);
    }
    return userList;
}
public void Showing() throws SQLException {
    Reload.addActionListener(e->{
    ArrayList<User> list;
    try {
        list = userList();

    DefaultTableModel model = (DefaultTableModel) table.getModel();
    Object[] row = new Object[1];
    for(int i=0;i<list.size();i++) {
        row[0]=list.get(i).getName();
        model.addRow(row);

1 个答案:

答案 0 :(得分:1)

停止,继续阅读How to Use Tables。实际上,当您使用它时,请同时阅读A Visual Guide to Layout ManagersCreating a GUI With JFC/Swing。因此,SO不能替代好的教程,文档和研究。

您的“基本”问题归结为以下事实:JTable尚未配置为实际显示任何内容(即列)。

因此添加类似...

DefaultTableModel model = new DefaultTableModel(new String[]{"Name"}, 0);
table.setModel(model);

给您的构造函数将解决您的“立即”问题

this.setLayout(null);不会帮助您,它将使您的生活变得更加艰难。学习使用布局管理器,这是值得花费的时间。

您还应该关闭数据库资源,这是try-with-resources如此强大的地方

try (Statement st = con.createStatement();
                ResultSet rs = st.executeQuery(query)) {
    User user;
    while (rs.next()) {
        user = new User(rs.getString("Nom"));
        userList.add(user);
    }
}

您还将混合Swing和AWT组件,随着UI变得更加复杂,这将引起巨大的头痛。