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

تلوين صف أو خلية في جدول

مغلق
بدأه friendsack في 28 أبريل 2006 · 5 رد · 1,479 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كيف يمكن أن نقوم تلوين خلية في جدول أو صف كامل

جربت بالنسبة للعمود عرفت ألونه

بس الخلية والصف ما قدرت

#2

ماذا استخدمت للعمود؟

عموما عليك ب :

http://java.sun.com/j2se/1.4.2/docs/api/ja...llRenderer.html

#3

بالنسبة للعمود

table.get Culomn(1).setBackground(Color.black);

#4

هل جربت الوصلة التي أعطيتك إياها،،؟

الأمر ليس مباشر،، لكن عليك أن تعمل القليل من الجهد!

تحتاج أن تصنع فئة جديدة خاصة لرسم محتويات الخلايا!

بهذا الطريقة تستطيع أن تحدد لون أحد الخلايا!

هذا القليل من الجهد سيمكنك من فهم كيف التحكم بمظهر الجدول كاملا!

بالمناسبة،، ابحث عن TableCellRenderer في المنتدى أو في google وربما تجد بعض التعليمات،

بالتوفيق!

#5

جزاك الله خير ابو مازن

اعتقد انها لا تختلف كثيرا عن ListCellRenderer

كان لي محاولات في تلوين خلايا JTable ، واعتقد ان هذه المحاوله هي الافضل مع الصنف TableCellRenderer ..

package test2;

import javax.swing.table.TableCellRenderer;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class MyTableCellRenderer implements TableCellRenderer { 
  
  private JLabel label;
  
  public MyTableCellRenderer(){
 	 label= new JLabel();
 	 label.setOpaque(true);
 	 label.setHorizontalAlignment(JLabel.CENTER);
       	 label.setVerticalAlignment(JLabel.CENTER);	
  }
  
  public Component getTableCellRendererComponent(JTable table, 
            Object value, 
            boolean isSelected, 
            boolean hasFocus, 
            int row, 
            int column) 
  { 	 
    Color foreground, background;
    label.setText(value.toString());

       if (isSelected) {
         foreground = new Color(147, 0, 127);
         background = new Color(255, 231, 252);
       } else {
         if (row % 2 == 0) {
           foreground = new Color(19, 37, 121);
           background = new Color(212, 217, 244);
         } else {
           foreground = new Color(0, 102, 51);
           background = new Color(219, 255, 237);
         }
       }
       
//       if(hasFocus){
//        foreground = new Color(99, 106, 71);
//           background = new Color(229, 235, 203);
//       }
    
    if(value.toString().equals("0"))
   	 foreground =  new java.awt.Color(252, 38, 0);
    
    label.setForeground(foreground);
       label.setBackground(background);
    
    return label; 
  } 
}

package test2;
import java.util.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class Test_Frame_Table extends JFrame {

	JTable table;
	JButton button;
	Object [][] row;
	Object []   col;

	public Test_Frame_Table(){
  row=getRowData();
  col=getColumnData();
  
  table=new JTable( row, col);
  
  table.setDefaultRenderer(Object.class, new MyTableCellRenderer());
  
  button= new JButton("colse");
  
  button.addActionListener(new ActionListener(){
 	 public void actionPerformed(ActionEvent e){
    close();
 	 }
  });

  
  JPanel panelCenter= new JPanel();
  panelCenter.add(table);
  
  add(panelCenter, BorderLayout.CENTER);
  add(button, BorderLayout.SOUTH);
  pack();
  setVisible(true);
	}

	private void close(){
  System.exit(0);
	}


	public Object[] getColumnData(){
  return new Object[]{"ID", "NAME"};
	}
	public Object[][] getRowData(){
  return new Object[][]{
   	 {"111", "uthman"},
   	 {"222", "FAHED"},
   	 {"0", "kaled"},
   	 {"444", "ali"}
      };
	}
  
	public static void main(String[]ar){
  new Test_Frame_Table();
	}

}

لو أردت انشاء حدث عند تغيير قيمة أي خليه

هل اضيف المستمع

VetoableChangeListener

للعنصر label الموجود في الصنف MyTableCellRenderer

؟ او هناك مستمع افضل .

11_03_06_12_48_57_1142110137Image(_66).jpg

#6

لم أجرب الشفرة،، لكن واضح أنها تلون الخلايا حسب شروط معينة،، عمل رائع،،،

لكن الشفرة الثانية غريبة عليك!!

يعني أفترض أنك تعرف TableModel قبل أن تعرف TableCellRenderer!

عموما،، دائما استخدم TableModel أو طبعا AbstractTableModel،، عندها الأمر سيكون سهلا جدا!!

كل ما عليك هو أن تستمع لهذا AbstractTableModel من خلال addListener خاص بها،،

المهم،،

لو تغير أي شيء في هذا الجدول الحقيقي TableModel يكفي أن تنادي على tableContentsChanged وسيعرف كل مستمع بهذا التغيير!

بالتوفيق!

هذا الموضوع مغلق.

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