Я новичок, у меня есть JTable, который я хочу заполнить набором результатов, который должен меняться каждый раз, когда пользователь вводит ключевое слово поиска в TextField, а затем нажимает кнопку поиска. Я искал неделю и до сих пор не знаю, как использовать AbstratTableModel с моим набором результатов, чтобы отображать и обновлять JTable после каждого нажатия кнопки поиска.
вот весь код:
view.CatalogueSWING.java
public class CatalogueSWING extends JFrame{
JLabel jLabelMC = new JLabel("Key Word");
JTextField jTextFieldMC = new JTextField(20); // The textfield that contains the search keyword
JButton jButtonSearch = new JButton("Search");
CatalogueBusiness ca; // the business class which contains the "SearchByKeyWord method"
JTable table;
JPanel pCenter;
//---
public CatalogueSWING() {
ca = new CatalogueBusiness();
JPanel pNorth = new JPanel();
pNorth.setLayout(new FlowLayout());
pNorth.add(jLabelMC);
pNorth.add(jTextFieldMC);
pNorth.add(jButtonSearch);
pCenter = new JPanel();
pCenter.setLayout(new BorderLayout());
pCenter.add(table);
this.setLayout(new BorderLayout());
this.add(pCenter, BorderLayout.CENTER);
this.setSize(900, 500);
pCenter.add(new JScrollPane(table));
this.add(pNorth, BorderLayout.NORTH);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
jButtonSearch.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
String kw = jTextFieldMC.getText();
table = new JTable(ca.SearchByKeyWord(kw)); // SearchByKeyWord(String kw) is the method in my CatalogueBusiness class in another package.
pCenter.add(table);
System.out.println("You clicked the button");
}
});
}
Вот бизнес-класс:
business.CatalogueBusiness.java :
@Override
public List<Product> SearchByKeyWord(String kw) {
List<Product> listProducts = new ArrayList<Product>();
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/DB_TPJDBC","root","password");
PreparedStatement ps = conn.prepareStatement("select * from PRODUCTS where NAME_PROD like ?");
ps.setString(1, "%"+kw+"%");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
Productp = new Produit();
p.setIdProduct(rs.getInt("ID_PROD"));
p.setNomProduct(rs.getString("NAME_PROD"));
p.setPrice(rs.getDouble("PRICE"));
p.setQuantite(rs.getInt("QUANTITY"));
listProducts.add(p);
}
//ps.close();
//conn.close();
} catch (Exception e) {
e.printStackTrace();
}
return listProducts;
}
и вот класс продукта:
бизнес.Продукт.java :
import java.io.Serializable;
public class Product implements Serializable {
private int idProduct;
private String nomProduct;
private double price;
private int quantity;
public Produit(String nomProduct, double price, int quantity) {
super();
this.nomProduct = nomProduct;
this.price = price;
this.quantity = quantity;
}
public Product() {
super();
}
// getters & setter ...
// ...
и, наконец, AbsractTableModel
бизнес.ProductModel.java
public class ProduitModel extends AbstractTableModel{
@Override
public int getColumnCount() {
//....
}
@Override
public int getRowCount() {
//...
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
//...
}
@Override
public String getColumnName(int column) {
//...
}
Я остановился здесь, я не знаю, как использовать AbstractTableModel в моем случае, я много искал и до сих пор не знаю, как использовать его с моим набором результатов, чтобы обновлять JTable каждый раз, когда я нажимаю «Кнопку поиска» с некоторым ключевым словом. в текстовом поле поиска.
Заранее спасибо.