السلام عليكم ورحمة الله
اريد عمل زرار يقوم بعمل Refresh عند الضغط عليه يعمل مقارنه بين البيانات الموجودة في الداتابييز والبيانات الموجودة في ال jlist ويضيف عليهم الجديد فقط
وشكرا
السلام عليكم ورحمة الله
اريد عمل زرار يقوم بعمل Refresh عند الضغط عليه يعمل مقارنه بين البيانات الموجودة في الداتابييز والبيانات الموجودة في ال jlist ويضيف عليهم الجديد فقط
وشكرا
علاء الصالحي كتب:طيب ما المشكلة التي تواجهها؟
تحياتي
عند الضغط على زر refresh يقوم بمقارنة البيانات المعروضة في الداتا بييز والموجود في jTable واذا كان هناك صفوف في الداتا بييز ليست معروضة في jtable يقوم بالتحديث في jtable
,وهناك مشكلة اخرى لو عندي JComboBox1 تحتوي على الفئة و JComboBox2 تحتوي على الاصناف اريد عند اختيار الفئة من JComboBox1 يعرض في JComboBox2 الاصناف التابعة لهذه الفئة فقط المشكلة انه عند اختيار الفئة فئة 1 مثلا من JComboBox1 يظهر في JComboBox2 الاصناف بشكل صحيح ولكن لو عاودت اختيار فئة 2 يظهر في JComboBox2 اصناف الفئتين معا
import java.sql.*;
import java.util.logging.*;
public class NewJFrame extends javax.swing.JFrame {
Connection con;
Statement st;
ResultSet res;
int catId;
/** Creates new form NewJFrame */
public NewJFrame() {
initComponents();
connectDB();
getAllCategory();
}
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jComboBox1 = new javax.swing.JComboBox();
jComboBox2 = new javax.swing.JComboBox();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jComboBox1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jComboBox1ActionPerformed(evt);
}
});
private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
System.out.println(jComboBox1.getSelectedItem());
try {
// TODO add your handling code here:
String selectFrom = "SELECT category_id FROM JBusiness.category WHERE category_name ='"+jComboBox1.getSelectedItem()+"'";
res = st.executeQuery(selectFrom);
while (res.next()) {
catId = res.getInt(1);
getItems(catId);
}
} catch (SQLException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JComboBox jComboBox1;
private javax.swing.JComboBox jComboBox2;
private javax.swing.JPanel jPanel1;
// End of variables declaration
private void getAllCategory() {
jComboBox1.addItem("");
try{
String selectFrom = "SELECT category_name FROM JBusiness.category ORDER BY category_name";
res = st.executeQuery(selectFrom);
while (res.next()) {
jComboBox1.addItem(res.getString(1));
}
}catch (SQLException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void connectDB() {
try {
con = DBConnectionUtility.createMySqlConnection();
st = con.createStatement();
System.out.println("Statements created....");
} catch (SQLException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void getItems(int catId) {
try {
String selectFrom = "SELECT item_name FROM JBusiness.items WHERE category_id ="+catId+" ORDER BY item_name";
res = st.executeQuery(selectFrom);
while (res.next()) {
jComboBox2.addItem(res.getString(1));
}
}catch (SQLException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
}تم تعديل هذه المشاركة بواسطة _jmt في 4 أبريل 2012 في 09:21
السلام عليكم ورحمة الله وبركاته ..
ممكن نعمل زرار ال Refresh انه يحدث الجدول كليا وفقا للجدول البيانات .. بدل ما نعمل مقارنه وبعد كده يضيف الجديد ..
ممكن تعمل داله يتم استدعائها عند الضغط على الزر .. الداله دى هتنشأ الـ JTable من جديد وفقا لجدول البيانات ..
اتفضلى الـ Function دى ويا رب تستفيدى منها :)
void getTable(String query){
try{
resultSet = statement.executeQuery(query); //
// SetTable
// Get Row Count
resultSet.first();
resultSet.last();
int rowCount = resultSet.getRow();
resultSet.first();
resultSet.previous();
columnOb = new Object[resultSet.getMetaData().getColumnCount()];
rowsOb = new Object[rowCount][resultSet.getMetaData().getColumnCount()];
// COULMN
for(int i =1;i<=resultSet.getMetaData().getColumnCount();i++){
// columns.addElement(resultSet.getMetaData().getColumnName(i));
columnOb[i-1]=new Object();
columnOb[i-1] =resultSet.getMetaData().getColumnName(i);
}
//ROWS
int j=0;
while(resultSet.next()==true){
for(int i =1;i<=resultSet.getMetaData().getColumnCount();i++){
rowsOb[j][i-1] = new Object();
rowsOb[j][i-1]=getObject(i);
}
j++;
}
// Update Table
tableModel.setDataVector(rowsOb, columnOb);
northPanel.validate(); // northPanel is the JPanel Table added to ..
}catch(SQLException ex){
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "ResultSet Ex..."+ex.toString());
}
}
Object getObject(int index){
Object object = new Object();
try{
switch(resultSet.getMetaData().getColumnType(index)){
case Types.VARCHAR:
return object= resultSet.getString(index);
case Types.INTEGER:
return object= resultSet.getInt(index);
case Types.DATE:
return object= resultSet.getDate(index);
case Types.DOUBLE:
return object= resultSet.getDouble(index);
}}catch(SQLException ex){
try{
JOptionPane.showMessageDialog(null,"no Type is!"+resultSet.getMetaData().getColumnTypeName(index)+ex.toString());
}catch(SQLException e){JOptionPane.showMessageDialog(null,""+e.toString());}
}
return object;
}شكرا اشتغلت معايا
,وهناك مشكلة اخرى لو عندي JComboBox1 تحتوي على الفئة و JComboBox2 تحتوي على الاصناف اريد عند اختيار الفئة من JComboBox1 يعرض في JComboBox2 الاصناف التابعة لهذه الفئة فقط المشكلة انه عند اختيار الفئة فئة 1 مثلا من JComboBox1 يظهر في JComboBox2 الاصناف بشكل صحيح ولكن لو عاودت اختيار فئة 2 يظهر في JComboBox2 اصناف الفئتين معا
تم تعديل هذه المشاركة بواسطة _jmt في 7 أبريل 2012 في 07:10
قوم بافراغ محتويات الـJComboBox2 قبل الاضافه
ولا تقوم باضافه item له فهذا يضيف على الموجود بالسابق
او قوم باستخدام Model لذلك