[英]How to refresh data in Jscrollpane bound with jtable?
當我直接使用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();
}
}
滾動面板未刷新其數據。
完成后,您不會關閉連接。
在構造GUI之前,應該從數據庫中讀取一次信息,然后將信息放入TableModel中 。
當您應該使用布局管理器時,您嘗試手動放置所有Swing組件。
您沒有將Swing組件放在Event Dispatch線程上 。
閱讀和學習應該足以讓您忙一陣子。
它沒有顯示的原因是您每次單擊按鈕都實例化一個新的JScrollPane。 相反,您只應該實例化它一次,而不會每次都重新創建它(即:在構造函數中)。
將以下內容移到構造函數的末尾:
JScrollPane sp=new JScrollPane(tb);
sp.setBounds(1,165,687,440);
另外,不要將catch異常留空,因為您將永遠不知道程序是否引發異常。 將以下內容添加到catch異常子句中:
ee.printStackTrace();
並處理所有打印出來的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.