如何使用jtable绑定Jscrollpane中的数据?

时间:2014-05-30 11:20:55

标签: java swing jdbc jtable core

当我直接使用jtable时,我的代码正常工作,但是当我用滚动面板绑定它时,它会运行一次。再次点击按钮后,它会隐藏数据。这是代码:

import java.awt.ScrollPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

import com.mysql.jdbc.Statement;

class Scrl extends JFrame implements ActionListener 
{
    JScrollPane sp;
    Icon back,front;
    JLabel l,l1;
    JTable tb=new JTable();
    DefaultTableModel model;
    String column[]={"JobcardNo","Customer Name","Brand","Date","PhoneNo"};
    JTextField jobt=new JTextField("");
    JButton b=new JButton("click");


    public Scrl()

    {
        b.setBounds(200,140,100,20);
        jobt.setBounds(114,50,100,20);
        model = new DefaultTableModel();
        tb.setModel(model); 
        model.setColumnIdentifiers(column);
        add(jobt);
        add(b);


        b.addActionListener(this);


        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setResizable(false);
        setLocationRelativeTo(null);
        setLayout(null);
        setSize(700,600);
        setVisible(true);
        setLocationRelativeTo(null);
    }

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        if(e.getSource()==b)
        {
            String job_no=jobt.getText();

            try
            {
                Class.forName("com.mysql.jdbc.Driver");
                Connection    con=DriverManager.getConnection("jdbc:mysql://localhost:3306/ac_data","root","root");
                java.sql.Statement st=con.createStatement();
                ResultSet rs=st.executeQuery("select * from main");
                while(rs.next())
                {
                    String hey=rs.getString(1);
                    if(hey.equals(job_no))
                    {
                         System.out.println(rs.getString(2));
                        String jobno=rs.getString(1);
                        String names=rs.getString(2);
                        String brand=rs.getString(21);
                        String date=rs.getString(6);
                        String phoneno=rs.getString(4);
                        model.addRow(new Object[]{jobno,names,brand,date,phoneno});                         
                    }
                }   
            }

            catch(Exception ee)
            {                   
            }

        }
        JScrollPane sp=new JScrollPane(tb);
        sp.setBounds(1,165,687,440);
        add(sp);
    }
    public static void main(String[] args) 
    {
        new Scrl();
    }
}

滚动面板不会刷新数据。

2 个答案:

答案 0 :(得分:2)

  1. 完成后不要关闭连接。

  2. 在构建GUI之前,您应该从数据库中读取一次信息,然后将信息放入TableModel

  3. 当您使用layout manager时,您正试图手动放置所有Swing组件。

  4. 你没有把你的Swing组件放在Event Dispatch thread上。

  5. 这应该足够阅读和学习让你忙碌一段时间。

答案 1 :(得分:0)

它没有显示的原因是你每次点击按钮都要实例化一个新的JScrollPane。相反,你应该只在某个地方实例化它,每次都不会重新创建它(例如:在你的构造函数中)。

将以下内容移动到构造函数的末尾:

JScrollPane sp=new JScrollPane(tb);
sp.setBounds(1,165,687,440);

此外,不要将您的catch异常留空,因为您永远不会知道您的程序是否抛出异常。将以下内容添加到catch异常子句中:

ee.printStackTrace();

并处理它打印出来的任何错误。