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

سؤاال عن Jtable

بدأه kiubo في 15 مايو 2012 · 4 رد · 777 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

اسعد الله مسائكم\ صباحكم بكل خير

حسناً .. لدي جدول من نوع JTable يقوم بعرض لي البيانات من قاعدة .. اهي ليست مشكلة لكن اريد الاستفسار عن امر معين اذ بالامكان فعله ام لا

كما ترون بالصورة.. النص غير واضح وغير مقروء .. هل استطيع القيام ب دمج لل الخلايا نفسها كي تصبح مقروءة..

post-250413-006554500 1337077987_thumb.p

هذة ال method الخاصه بعرض الخلايا

    public void Updata() {
        try {
//show on to table
      String sql_student_new=  "SELECT student.StudentId, student.FirstName,student.LastName,"
          + "diagnosis_new.timeOfDiagnosis,"
          + "diagnosis_new.DateOfDiagnosis,diagnosis_new.resultOfDiagnosis_EN,diagnosis_new.questions_answersOfDiagnosis FROM diagnosis_new "
          + "INNER JOIN student ON diagnosis_new.student_Id  ORDER BY student.FirstName ASC;";


            preparesStat = connection_11.getConnection().prepareStatement(sql_student_new);
            rssultSet = preparesStat.executeQuery();
            Table_11.setModel(DbUtils.resultSetToTableModel(rssultSet));


        } catch (SQLException ex) {
            Logger.getLogger(searchCases.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

استخدم مكتبة معينه اسمها

DbUtils

من خلال هذا السطر عملت بمناداة البيانات من القاعدة الى الجداول مباشره

     Table_11.setModel(DbUtils.resultSetToTableModel(rssultSet));

شكراً جزيلا لكم

والى هذا الصرح العظيم ..تعملت منكم كثيراً... :blush:

المرفقات
sdf.png

كن مثل طابع البريد ، التصق بهدفك...حتى تصل الى هناك!

#2

السلام عليكم ...

  1. يمكن زيادة ارتفاع العمود , و إضافة Render لعمل wrap للنص ..
  2. class LineWrapCellRenderer  extends JTextArea implements TableCellRenderer {
    
        	@Override
        	public Component getTableCellRendererComponent(
                        	JTable table,
                        	Object value,
                        	boolean isSelected,
                        	boolean hasFocus,
                        	int row,
                        	int column) {
                	this.setText((String)value);
                	this.setWrapStyleWord(true);                	
                	this.setLineWrap(true);         		
                	this.setBackground(Color.red);
                	return this;
        	}
    	}

  3. ثم :
    jTable1.setRowHeight(100);
        	//jTable1.setDefaultRenderer(String.class, new LineWrapCellRenderer());
        	jTable1.setDefaultRenderer(Object.class, new LineWrapCellRenderer());

  4. لعمل merge أو spanning مثل هذا الشكل , يمكنكم زيارة الرابط حيث الكود المصدري موجود:
    139_table12.gif

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 15 مايو 2012 في 14:12

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3
houssam11350_11350 كتب:

السلام عليكم ...

  1. يمكن زيادة ارتفاع العمود , و إضافة Render لعمل wrap للنص ..
  2. class LineWrapCellRenderer  extends JTextArea implements TableCellRenderer {
    
        	@Override
        	public Component getTableCellRendererComponent(
                        	JTable table,
                        	Object value,
                        	boolean isSelected,
                        	boolean hasFocus,
                        	int row,
                        	int column) {
                	this.setText((String)value);
                	this.setWrapStyleWord(true);                	
                	this.setLineWrap(true);         		
                	this.setBackground(Color.red);
                	return this;
        	}
    	}

  3. ثم :
    jTable1.setRowHeight(100);
        	//jTable1.setDefaultRenderer(String.class, new LineWrapCellRenderer());
        	jTable1.setDefaultRenderer(Object.class, new LineWrapCellRenderer());

  4. لعمل merge أو spanning مثل هذا الشكل , يمكنكم زيارة الرابط حيث الكود المصدري موجود:
    139_table12.gif

وعليكم السلام ورحمة الله وبركاته

post-250413-044144400 1337083069_thumb.p

رائع .. :lol:

لكنني لم افهم الكود جيداً

حسناً

الان انشأنا هذا ال class

وقمنا بكتابة هذة ال method ممكن ان تشرحها لي

@Override
        public Component getTableCellRendererComponent(
                        JTable table,
                        Object value,
                        boolean isSelected,
                        boolean hasFocus,
                        int row,
                        int column) {

ومامعنى هذا السطر

 Table_11.setDefaultRenderer(Object.class, new LineWrapCellRenderer());

جزاك الله خير ووفقك ربي لما يحبه ويرضاه

المرفقات
yes.1.png

كن مثل طابع البريد ، التصق بهدفك...حتى تصل الى هناك!

#4

السلام عليكم ..

بارك الله بكم ...

  1. لفهم الكود السابق يجب أن فهم الــ interface و يوجد الكثير من المواضيع تتحدث عنا ربما (شرح فروق بين مفاهيم في جافا).
  2. ما يهمنا هو أن الــ interface هي مجموع من الــ methods التي ليس لها body ..(تعريف فقط ).
  3. أي صف يحقق الواجهة (any class implements the interface ) فأنه يجب أن يقوم بإعادة تعريف كل الــ methods في تلك الواجهة ..
  4. في الــ Netbeans لو عملنا نقرة يمينية على كلمة TableCellRenderer في الكود السابق ثم navigate ثم go to declaration .. المفروض يعرض مايلي :
    package javax.swing.table;
    
    import java.awt.Component;
    import javax.swing.JTable;
    
    public interface TableCellRenderer
    {
    
    	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column);
    }

  5. لتعديل طريقة عرض الــ JTable يجب إخبار الــ JTable بالصف الذي يحقق الواجهة TableCellRenderer ثم الــ JTable يقوم باستدعاء الدالة getTableCellRendererComponent التي تعيد Component لكي يتم إظهاره في الخليه ..
  6. لو كتبنا الصف بالشكل التالي :
    class LineWrapCellRenderer  implements TableCellRenderer {
    
        	//@Override
        	public Component getTableCellRendererComponent(
                        	JTable table,
                        	Object value,
                        	boolean isSelected,
                        	boolean hasFocus,
                        	int row,
                        	int column) {
            	JTextArea area = new JTextArea();
                	area.setText((String)value);
                	area.setWrapStyleWord(true);                	
                	area.setLineWrap(true);             	
                	//this.setBackground(Color.red);
                	return area;
        	}
    	}

    لكان أوضح , حيث لدينا صف يحقق الواجهة و بالتالي يعيد تعريف الــ Methods فيها .. يضاف الرمز @Override فوق اسم الــ method للدالة أن هذه الدالة هي إعادة تعريف لدالة موجودة في interface و ليست دالة عادية في الصف ..

  7. المفروض الدالة getTableCellRendererComponent تعيد كائن من نوع Component و بالتالي يمكن إعادة (JButton or JLabel or JTextArea or..etc) اعتمادا على القيم الممرة في الوسطاء , حيث يتم تمرريرها من قبل الــ JTable ..
  8. لإخبار الــ JTable عن الصف الذي يجب ان يستخدمه لكي يظهر render الخلايا نستخدم jTable1.setDefaultRenderer(Object.class, new LineWrapCellRenderer()); حيث أول بارمتر هو نوع صف العمود و هنا هو Object.class أي كل الأعمدة التي نوع بياناتها مشتق من Object أي كل الأعمدة ... و البارمتر الثاني هو الصف الذي يحقق الواجهة المذكورة ...
2

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#5
houssam11350_11350 كتب:

السلام عليكم ..

بارك الله بكم ...

  1. لفهم الكود السابق يجب أن فهم الــ interface و يوجد الكثير من المواضيع تتحدث عنا ربما (شرح فروق بين مفاهيم في جافا).
  2. ما يهمنا هو أن الــ interface هي مجموع من الــ methods التي ليس لها body ..(تعريف فقط ).
  3. أي صف يحقق الواجهة (any class implements the interface ) فأنه يجب أن يقوم بإعادة تعريف كل الــ methods في تلك الواجهة ..
  4. في الــ Netbeans لو عملنا نقرة يمينية على كلمة TableCellRenderer في الكود السابق ثم navigate ثم go to declaration .. المفروض يعرض مايلي :
    package javax.swing.table;
    
    import java.awt.Component;
    import javax.swing.JTable;
    
    public interface TableCellRenderer
    {
    
    	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column);
    }

  5. لتعديل طريقة عرض الــ JTable يجب إخبار الــ JTable بالصف الذي يحقق الواجهة TableCellRenderer ثم الــ JTable يقوم باستدعاء الدالة getTableCellRendererComponent التي تعيد Component لكي يتم إظهاره في الخليه ..
  6. لو كتبنا الصف بالشكل التالي :
    class LineWrapCellRenderer  implements TableCellRenderer {
    
        	//@Override
        	public Component getTableCellRendererComponent(
                        	JTable table,
                        	Object value,
                        	boolean isSelected,
                        	boolean hasFocus,
                        	int row,
                        	int column) {
            	JTextArea area = new JTextArea();
                	area.setText((String)value);
                	area.setWrapStyleWord(true);                	
                	area.setLineWrap(true);             	
                	//this.setBackground(Color.red);
                	return area;
        	}
    	}

    لكان أوضح , حيث لدينا صف يحقق الواجهة و بالتالي يعيد تعريف الــ Methods فيها .. يضاف الرمز @Override فوق اسم الــ method للدالة أن هذه الدالة هي إعادة تعريف لدالة موجودة في interface و ليست دالة عادية في الصف ..

  7. المفروض الدالة getTableCellRendererComponent تعيد كائن من نوع Component و بالتالي يمكن إعادة (JButton or JLabel or JTextArea or..etc) اعتمادا على القيم الممرة في الوسطاء , حيث يتم تمرريرها من قبل الــ JTable ..
  8. لإخبار الــ JTable عن الصف الذي يجب ان يستخدمه لكي يظهر render الخلايا نستخدم jTable1.setDefaultRenderer(Object.class, new LineWrapCellRenderer()); حيث أول بارمتر هو نوع صف العمود و هنا هو Object.class أي كل الأعمدة التي نوع بياناتها مشتق من Object أي كل الأعمدة ... و البارمتر الثاني هو الصف الذي يحقق الواجهة المذكورة ...

ممتاز ,, في اقرب فرصه سأدرس ماقلته وسأفهم ان شاء لله

جزاك الله خيراَ اخي الفاضل ووسع الله في رزقك

كن مثل طابع البريد ، التصق بهدفك...حتى تصل الى هناك!

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