我是Java编程的新手。
我使用netbeans 8.2创建简单的项目。现在,我使用数据库中的数据创建了一个jtable
,并使用jComboBox
来过滤其数据。
我希望jTable
根据jCombobox
的选定项目显示数据。
jComboBox
也连接到数据库,但连接到另一个表。
数据库-sales
cat
:ID,类别product
:编号,规格,价格,数量 jComboBox
连接到表cat
,并显示来自category
列的数据。
问题是jTable
不显示数据。
package GUI;
public class MainGUI extends javax.swing.JFrame {
myQuery mq = new myQuery();
public MainGUI() {
initComponents();
BindCombo();
}
private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) { ArrayList <Product> list = mq.getData(jComboBox1.getSelectedItem().toString());
DefaultTableModel model = new DefaultTableModel();
model.setColumnIdentifiers(new Object \[\]{"id","specs","price","quantity"}); Object\[\] row = new Object\[4\];
for (int i= 0; i < list.size();i++){
row \[0\] = list.get(i).getId();
row \[1\] = list.get(i).getSpecs();
row \[2\] = list.get(i).getId();
row \[3\] = list.get(i).getSpecs();
model.addRow(row);
}
jTable1.setModel(model);
}
/*bind jComboBox to database table cat*/
private void BindCombo(){
Connection con = myQuery.Connect();
Statement st;
ResultSet rs;
try{
st = con.createStatement();
rs = st.executeQuery("SELECT * FROM cat");
while(rs.next()){
jComboBox1.addItem(rs.getString(2));
}
}catch(SQLException ex){
}
}
public class myQuery {
public static Connection Connect(){
Connection conn = null;
try{
Class.forName("com.mysql.jdbc.Driver");
conn = riverManager.getConnection("jdbc:mysql://localhost:3306/sales", "root", "");
System.out.println("Connected");
return conn;
}catch(Exception e){
JOptionPane.showMessageDialog(null, e);
return null;
}
}
/* fetch data from database to jTable*/
public ArrayList<Product> getData(String category){
ArrayList<Product> list = new ArrayList<Product>();
Connection conn = Connect();
Statement st = null;
ResultSet rs = null;
try{
st = conn.createStatement();
rs = st.executeQuery("SELECT 'id', 'specs', 'price', 'quantity' FROM 'product' WHERE 'category'");
Product p = null;
while(rs.next()){
p = new Product(
rs.getInt("id"),
rs.getString("specs"),
rs.getInt("price"),
rs.getInt("quantity")
);
list.add(p);
}
}catch(SQLException ex){
}
return list;
}
}
答案 0 :(得分:0)
让我先弄明白这一点。您想显示一个名为jTable的网格,并在jCombobox1中发生更改时刷新其内容,对吗? WHERE子句看起来很可疑,因为没有SARG方程(搜索参数)。
rs = st.executeQuery("SELECT 'id', 'specs', 'price', 'quantity' FROM 'product' WHERE 'category'"); You need WHERE 'category' = ???
非常少。实际上,在行上进行迭代的方式效率很低。尝试考虑每次都绑定到完整的SET,而不是“ for循环”。
答案 1 :(得分:0)
@Abra,这是initComponents的思想
private void initComponents(){
BindingAppPUEntityManager = java.beans.Beans.isDesignTime() ? null : javax.persistence.Persistence.createEntityManagerFactory("BindingAppPU").createEntityManager();
productQuery = java.beans.Beans.isDesignTime() ? null : BindingAppPUEntityManager.createQuery("SELECT p FROM Product p");
productList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : productQuery.getResultList();
jTabbedPane1 = new javax.swing.JTabbedPane();
categotyPanel = new javax.swing.JPanel();
jPanel1 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
jTextField1 = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
jPanel3 = new javax.swing.JPanel();
jComboBox1 = new javax.swing.JComboBox();
jLabel3 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jLabel4 = new javax.swing.JLabel();
productPanel = new javax.swing.JPanel();
jPanel4 = new javax.swing.JPanel();
jLabel5 = new javax.swing.JLabel();
jComboBox2 = new javax.swing.JComboBox();
jLabel6 = new javax.swing.JLabel();
jTextField2 = new javax.swing.JTextField();
jLabel7 = new javax.swing.JLabel();
jTextField3 = new javax.swing.JTextField();
jLabel8 = new javax.swing.JLabel();
jTextField4 = new javax.swing.JTextField();
jLabel9 = new javax.swing.JLabel();
jTextField5 = new javax.swing.JTextField();
jButton2 = new javax.swing.JButton();
jLabel10 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jTabbedPane1.setFont(new java.awt.Font("Times New Roman", 0, 18)); // NOI18N
jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
jTextField1.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
jTextField1.setHorizontalAlignment(javax.swing.JTextField.CENTER);
jLabel1.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
jLabel1.setText("Name");
jButton1.setFont(new java.awt.Font("Times New Roman", 1, 12)); // NOI18N
jButton1.setText("add");
jLabel2.setFont(new java.awt.Font("Times New Roman", 0, 18)); // NOI18N
jLabel2.setText("Add New Category");
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(jLabel2)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addGap(95, 95, 95)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jTextField1)
.addGap(95, 95, 95))
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(12, 12, 12)
.addComponent(jButton1)
.addContainerGap())
);
jPanel3.setBorder(javax.swing.BorderFactory.createEtchedBorder());
jComboBox1.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
jComboBox1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jComboBox1ActionPerformed(evt);
}
});
jLabel3.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
jLabel3.setText("Available Categories");
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
}
));
jScrollPane1.setViewportView(jTable1);
jLabel4.setFont(new java.awt.Font("Times New Roman", 1, 18)); // NOI18N
jLabel4.setText("Available Products");
javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addGap(20, 20, 20)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
.addGap(23, 23, 23))
.addGroup(jPanel3Layout.createSequentialGroup()
.addGap(30, 30, 30)
.addComponent(jLabel3)
.addGap(18, 18, 18)
.addComponent(jComboBox1, 0, 203, Short.MAX_VALUE)
.addGap(91, 91, 91))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel4)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel3))
.addGap(13, 13, 13)
.addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 325, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(19, Short.MAX_VALUE))
);
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
javax.swing.GroupLayout categotyPanelLayout = new javax.swing.GroupLayout(categotyPanel);
categotyPanel.setLayout(categotyPanelLayout);
categotyPanelLayout.setHorizontalGroup(
categotyPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, categotyPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
categotyPanelLayout.setVerticalGroup(
categotyPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(categotyPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jTabbedPane1.addTab("Category", categotyPanel);
jPanel4.setBorder(javax.swing.BorderFactory.createEtchedBorder());
jLabel5.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N
jLabel5.setText("Category");
jComboBox2.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
jLabel6.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N
jLabel6.setText("Name");
jTextField2.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
jTextField2.setHorizontalAlignment(javax.swing.JTextField.CENTER);
jLabel7.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N
jLabel7.setText("CostPrice");
jTextField3.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
jTextField3.setHorizontalAlignment(javax.swing.JTextField.CENTER);
jLabel8.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N
jLabel8.setText("SalePrice");
jTextField4.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
jTextField4.setHorizontalAlignment(javax.swing.JTextField.CENTER);
jLabel9.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N
jLabel9.setText("Quantity");
jTextField5.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
jTextField5.setHorizontalAlignment(javax.swing.JTextField.CENTER);
jButton2.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
jButton2.setText("Add");
jLabel10.setFont(new java.awt.Font("Times New Roman", 1, 18)); // NOI18N
jLabel10.setText("Add new Product");
javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
jPanel4.setLayout(jPanel4Layout);
jPanel4Layout.setHorizontalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addGap(139, 139, 139)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel6)
.addComponent(jLabel7)
.addComponent(jLabel8)
.addComponent(jLabel9)
.addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(20, 20, 20)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTextField4, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jTextField2, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jTextField3)
.addComponent(jTextField5)
.addComponent(jComboBox2, 0, 176, Short.MAX_VALUE))
.addGap(85, 85, 85))
.addGroup(jPanel4Layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel10))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addGap(17, 17, 17)
.addComponent(jLabel10)
.addGap(18, 18, 18)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5)
.addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(25, 25, 25)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel6)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel7)
.addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel8)
.addComponent(jTextField4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel9)
.addComponent(jTextField5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(44, 44, 44)
.addComponent(jButton2)
.addContainerGap(225, Short.MAX_VALUE))
);
javax.swing.GroupLayout productPanelLayout = new javax.swing.GroupLayout(productPanel);
productPanel.setLayout(productPanelLayout);
productPanelLayout.setHorizontalGroup(
productPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, productPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
productPanelLayout.setVerticalGroup(
productPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(productPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
jTabbedPane1.addTab("Product", productPanel);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTabbedPane1)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTabbedPane1)
);
pack();
}// </editor-fold>