الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استعرض البيانات في jframe من jtable

بدأه M.S.B في 11 أبريل 2011 · 20 رد · 1,368 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي jFrame2 يوجد فيه jTable يقوم بإستعراض بيانات اربعة اعمده من قاعدة البيانات(قاعدة البيانات بها 20 عامود تقريباً)

ولدي زر jButton في نفس الفريم عند الضغط عليه يقوم بفتح jFrame1 وهو الذي استخدمته لتعبئة قاعدة البيانات من خلال الحقول الموجوده به

ما اريد معرفته هو كيف اقوم بإستعراض بيانات سجل معين من ال jTable في jFrame2

ما هي الفكره بالتحديد في ذلك؟

وبالصور سيتضح ما اريد قوله اكثر

post-233742-048413000%201302539828.jpg

هذا هو الjtable وبالضغط علي jButton2 يجب ان يفتح الjFrame1 ويستعرض بيانات السجل المحدد كما في الصورة التاليه

post-233742-089086500%201302539879.jpg

شاكر ومقدر تعاونكم

post-233742-048413000 1302539828_thumb.j

post-233742-089086500 1302539879_thumb.j

المرفقات
jtable.JPGjframe2.JPG
#2

هتاخذ الـ id من الـجدول وترسله الى الـ Jframe2

وتقوم باستدعاء كل البيانات من قاعده البيانات التى تخص هذا الـ id وبعد ذلك تقوم بوضعها فى الامكان الصحيحه حسب تصميمك

يكون مثلا الـsql query كدا

select * from mytable where id = selectedTableId

حيث ان mytable هو الجدول الخاص بالبيانات

و id هو اسم العمود فى قاعده البيانات

و selectedTableId هو القيمه التى اخذتها من الجدول فى الـ jframe1 والتى تمثل الـid المراد الاختيار بناء عليه

بالتوفيق

Software Developer
Mahmoudkelany.com


 

#3
اقتباس
هتاخذ الـ id من الـجدول وترسله الى الـ Jframe2

كيف يعني ارسله الى jframe2؟

هل اضع الكود في jframe1 او jframe2 او كلاهما؟

#4

فى البناء الخاص بالـ jframe2

او فى داله setId تضعها داخل الـ JFrame2 وانت فى jframe1 تستدعيها وتضع بها الـ id

Software Developer
Mahmoudkelany.com


 

#5

لم افهم تماماً ما تقصد ..إذا امكن ارجو ان توضح اكثر

ايضاً قرأت انه من الأفضل ان استخدم JDialog فما هو رأيك؟

تم تعديل هذه المشاركة بواسطة M.S.B في 11 أبريل 2011 في 23:34

#6
public class jframe2{
int id ; 
public jframe2(int id ){
this.id = id;
}
.
.
.
}

فى اثناء استدعاءك للكلاس jframe2 من الـ jframe1 ترسل الـid الذى اخترته من الجدول الى اليها

هكذا

int id = Integer.paseInt(((String)jtable.getValueAt(jtable.getSelectedRow , 0)));
jframe2 fr2 = new jframe2( id) ;

حيث 0 هو العمود الاول فى الجدول الذى يمثل الـ id وjtable هو الجدول

وبعد ذلك تقوم بعمل الـ SQL Query الذى ذكرته لك من قبل

Software Developer
Mahmoudkelany.com


 

#7

انا لدي في الjframe2 هذا الكود

 public void actionPerformed(ActionEvent e) {
 if(e.getSource()==jButton2){

          jframe2 regFace =new jframe2();
	  regFace.setVisible(true);

       }}

ولم اعرف كيف اصنع مثل هذا الكود واضعه في كودي

public class jframe2{

int id ;

public jframe2(int id ){

this.id = id;

}

.

.

.

}

#8

هيكون دا داخل الكلاس Jframe2

Software Developer
Mahmoudkelany.com


 

#9

اخي محمد شكراً لإهتمامك.. لا اخفيك اني ضائع قليلاً مع كلامك ولذلك سأطلعك على ما فعلته وما اريده في نقاط

*اريد فتح jframe1 من jframe2 عن طريق jbutton (هذه المهمه اكملتها وهذا هو الكود)


if(e.getSource()==jButton2){
jframe2 regFace =new jframe2();
regFace.setVisible(true);
}}
    public void actionPerformed(ActionEvent e) {

*حالما يُفتح الjframe1 عن طريق الjbutton في الjframe2 فإنه يجب ان يملاء جميع الحقول المتعلقه بالسطر في الجدول الذي هو موجود في الjframe2

النقطه التي بالأعلى تعني

-وجود sql query تبدأ العمل مباشره إذا تم فتح jframe1 عن طريق الjbutton في الjframe2

-عرض البيانات في الحقول في ال jframe1 بإستخدام ال query التي ذكرتها في السطر الذي فوق(هذه المهمه اكملتها جزئياً وهذا هو الكود)


dbconnect = new myDbConnection();
ResultSet resultSet =null;
resultSet = dbconnect.excuteQuery("SELECT id, area,location, status1 FROM pledges where id='17'");

while (resultSet.next()){
id.setText(resultSet.getString(1));
area.setText(resultSet.getString(2));
location.setText(resultSet.getString(3));
status.setText(resultSet.getString(4));
// i = Long.parseLong(rs1.getString(1));
}
try {

بإختصار اريد ان افهم الjframe1 انه إذا تم فتحك بإستخدام التbutton في jframe1 فإنه يجب عليك تنفيذ الquery ملئ جميع الحقول المتعلقة بها

تم تعديل هذه المشاركة بواسطة M.S.B في 13 أبريل 2011 في 14:22

#10

الحمد لله الحل تقريباً اكتمل وبقي فيه جزئيه صغيره

وهي عند تنفيذ الsql query في الjframe1 يعطيني خطأ

وهذا هو الكود في الjframe2

public void actionPerformed(ActionEvent e) {
if(e.getSource()==jButton2){
             int viewRow = jTable1.getSelectedRow();
    int modelRow = jTable1.convertRowIndexToModel(viewRow);
    DefaultTableModel model = (DefaultTableModel) jTable1.getModel();

    Vector<Object> rowVector = (Vector<Object>) model.getDataVector().get(modelRow);

    pf regFace =new pf();
            try {
                regFace.setSelectedRow(rowVector);
            } catch (SQLException ex) {
                Logger.getLogger(showp1.class.getName()).log(Level.SEVERE, null, ex);
            }
    regFace.setVisible(true); 



       }}

وهذه هي الداله في الjframe1

public void setSelectedRow(Vector<Object> row ) throws SQLException {
    dbconnect = new myDbConnection();
            ResultSet resultSet =null;
            resultSet = dbconnect.excuteQuery("SELECT id, area,location, status1 ,date1,insname FROM pledges where id='"+row.get(0).toString()+"'");

    while (resultSet.next()){
                  id.setText(resultSet.getString(1));
                    area.setText(resultSet.getString(2));
                    location.setText(resultSet.getString(3));
                    status.setText(resultSet.getString(4));
                    date.setText(resultSet.getString(5));
                    insname.setText(resultSet.getString(6));
                    //         i = Long.parseLong(rs1.getString(1));
                }
}
#11

هل لك ان تقوم بوضع الكود كاملا

لان لا اعلم كيف تكون شكل قاعده البيانات

Software Developer
Mahmoudkelany.com


 

#12

هذا هو كود الmyDbConnection

public class myDbConnection {

        static final String JDBC_DRIVER = "org.apache.derby.jdbc.ClientDriver";
        static final String DATABASE_URL = "jdbc:derby://localhost:1527/cddb";
         static  Connection connection;
        static Statement statement;
        static StringBuffer results ;
        static  ResultSetMetaData metaData ;
        static ResultSet resultSet ;
        static StringBuffer results2 ;

    public  myDbConnection(){
             try {
                    Class.forName( JDBC_DRIVER );
                     connection = DriverManager.getConnection( DATABASE_URL );
                     statement = connection.createStatement();
             } catch ( SQLException sqlException ) {
                     JOptionPane.showMessageDialog( null, sqlException.getMessage(),
                   "Database Error", JOptionPane.ERROR_MESSAGE );
      }

      catch ( ClassNotFoundException classNotFound ) {
                 JOptionPane.showMessageDialog( null, classNotFound.getMessage(),
                    "Driver Not Found", JOptionPane.ERROR_MESSAGE );
      }

    }

    public static  ResultSet excuteQuery(String query){
             try {
                      resultSet =   statement.executeQuery(query);

              } catch ( SQLException sqlException ) {
                 JOptionPane.showMessageDialog( null, sqlException.getMessage(),
                    "Database Error", JOptionPane.ERROR_MESSAGE );
              }
                 return resultSet ;
    }

     public static void excuteUpdate(String query){
          try {
              statement.executeUpdate(query);
      } catch ( SQLException sqlException ) {
             JOptionPane.showMessageDialog( null, sqlException.getMessage(),
                "Database Error", JOptionPane.ERROR_MESSAGE );
      }


    }
}

ملاحظه:الjframe1 اسمه pf و الjframe2 اسمه showp1

#13

الذي اظنه اخي محمد والله اعلم ان الخطأ هنا

 resultSet = dbconnect.excuteQuery("SELECT id, area,location, status1 ,date1,insname FROM pledges where id='"+row.get(0).toString()+"'");

حيث هو يأخذ فقطة قيمة الrow

وليس قيمة الid الموجوده في الrow

طبعاً الخطأ اساساً يرجع الى البدايه حيث وحدها قيمة الrow هي التي حُددت

 int viewRow = jTable1.getSelectedRow();
    int modelRow = jTable1.convertRowIndexToModel(viewRow);

طبعاً حاولت ان احل المشكله ولكن بلا فائده

#14

اخى الكريم انا بسال على هيكل قاعده البيانات

يعنى الـ id هل هو Integer ام Varchar

حاول تجرب كدا

 resultSet = dbconnect.excuteQuery("SELECT id, area,location, status1 ,date1,insname FROM pledges where id="+Integer.paseInt((String)row.get(0)));

Software Developer
Mahmoudkelany.com


 

#15

اهلاً محمد..نوع الid هو varchar

للتو قبل قليل استطعت بفضل الله ان اجد اين الخطأ وتقريباً قمت بإصلاح المشكله

الخطأ كان هنا

    Vector<Object> rowVector = (Vector<Object>) model.getDataVector().get(modelRow);

حيث كان يعمل إدخال لمصفوفه ..والمفترض ان يعمل إدخال لString لأن الId عباره عن varchar

وهذا الكود المعدل للjframe2(showp1)

if(e.getSource()==jButton2){
             int viewRow = jTable1.getSelectedRow();
    int modelRow = jTable1.convertRowIndexToModel(viewRow);
  Object oc=  jTable1.getModel().getValueAt(modelRow, 0);

  String vv=oc.toString();

    DefaultTableModel model = (DefaultTableModel) jTable1.getModel();

    pf regFace =new pf();
            try {
                regFace.setSelectedRow(vv);
            } catch (SQLException ex) {
                Logger.getLogger(showp1.class.getName()).log(Level.SEVERE, null, ex);
            }
    regFace.setVisible(true); 



       }

وهذا الكود المعدل للjframe1(pf)

public void setSelectedRow(String row ) throws SQLException {
    dbconnect = new myDbConnection();
            ResultSet resultSet =null;
            resultSet = dbconnect.excuteQuery("SELECT id, area,location, status1 ,date1,insname,oname,bname FROM pledges where id='"+row+"'");

    while (resultSet.next()){
                  id.setText(resultSet.getString(1));
                    area.setText(resultSet.getString(2));
                    location.setText(resultSet.getString(3));
                    status.setText(resultSet.getString(4));
                    date.setText(resultSet.getString(5));
                    insname.setText(resultSet.getString(6));
                    oname.setText(resultSet.getString(7));
                    bname.setText(resultSet.getString(8));
                    //         i = Long.parseLong(rs1.getString(1));
                }
}

الكود الى الآن ماشي تمام المشكله الآن انه لا يعرض جميع البيانات في الحقول

مثل bname والstreet

لا اعرف لماذا لا يسحبهم

#16

اخى الكريم هل بامكانك وضع المشروع الذى تعمل عليه

لان كدا الاكواد لا توضح شىء كما ذكرت لك من قبل

كى اكون قادر على مساعدتك ان شاء الله

Software Developer
Mahmoudkelany.com


 

#17

اخي الكريم انا كنت متردد في وضع الأكواد كامله ليس لشيء..ولكن لأنها تبدو (القراج) :blush:

ولكن تفضلها وارجو ان تعذرني لأنك إذا فتحتها فستشعر أنك بخرابه :ph34r:

تفضل JavaApplication20.rar

كلاس الjframe2 اسمه showp1

وكلاس jframe1 اسمه pf

طبعاً المشكله تقريباً حلت ولكن المشكله في الحقول لا تتفعل حتى اغلق البرنامج وافتحه من جديد

تم تعديل هذه المشاركة بواسطة M.S.B في 15 أبريل 2011 في 13:52

#18

قاعدة البيانات غير موجوده

Software Developer
Mahmoudkelany.com


 

#19

عذراً ولكن كيف ارفق لك قاعدة البيانات

انا استخدم derpy -JDBC

#20

ستجد قاعده البيانات

فى مكان حفظك لها

Software Developer
Mahmoudkelany.com


 

#21

انا عملت قاعدة البيانات بالjava DB داخل الnetBeans ولا اعرف بالظبط اين حفظها الnetBeans

مواضيع مشابهة