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

تلون صف في Jtable

بدأه شاب-حباب في 1 فبراير 2009 · 12 رد · 1,261 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحبا اخواني ,, :wacko: ابصراحة الجافا جننتني ,, يعني المشروع كلة ماتعبني بقدر انو ردت بس اللون صف بجدول دوختنييييييييييييييي :blink:

اخواني عندي جدول Jtable واريد اللون دائما عند اضافة صف حيث حسب نوع القيمة التي اريد اضيفها اضع لها لون معين واضيف صف جديد ,,

ياريت مثال بسيط وللعلم لكيت امثلة بال Code.google بس مادري اشوفها حيل معقدة يعني استدعى تلث فانكشنات وسوى كلاس علشان هالعملية !!!!!!!!!!!

مادري اذا عدكم طريقة مبسطة ,, او اذا في كلاسات بديلة ل JTable تسهل التعامل مع الجداول ؟؟؟؟

تحياتي لكم

m16.jpg

سأحمل روحي على راحتي والقي بها في مهاوي الردا

فأما حياة تسر الصديق و اما ممات يغيض العدا

#2

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

لتشخيص JTable، عليك خلق DefaultCellRenderer وإضافته إلى الJTable

هذا المثال يلون سطور الJTable حسب قيمة الcolumn الثانية


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

public class TestTable
{
public static void main(String args[])
{
Object rows[][] = {{"Row1", 10},{"Row2", 20},{"Row3", 30},{"Row4", 40}};
String cols[] = {"Column1", "Column2"};
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer()
{
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column)
{
JLabel lbl = (JLabel) super.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
lbl.setOpaque(true);
//we get the value of the second column
int val = Integer.parseInt(table.getValueAt(row, 1).toString());
//we test this value
if (val == 10)
//if equal to 10, we colour the row with green
lbl.setBackground(Color.GREEN);
else if (val == 20)
//if equal to 20, we colour the row with blue
lbl.setBackground(Color.BLUE);
else if (val == 30)
//if equal to 30, we colour the row with red
lbl.setBackground(Color.RED);
else
//if another value, we colour the row with white
lbl.setBackground(Color.WHITE);
return lbl;
}
};
JTable t = new JTable(rows, cols);
Object o = new Object();
//wa add the renderer to the table,
t.setDefaultRenderer(o.getClass(), renderer);
JFrame frm = new JFrame();
frm.add(t);
frm.setSize(200, 200);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
}

#3

أضف هذا الكلاس إلى مشروعك

import java.awt.Color;
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class MonCellRenderer extends DefaultTableCellRenderer {

	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		Component cell = super.getTableCellRendererComponent(table, value,
				isSelected, hasFocus, row, column);

		if (row == 0 && column == 1)
			cell.setBackground(Color.BLUE);
		else
			cell.setBackground(Color.cyan);
		return cell;
	}
}

وفي الكود

if (row == 0 && column == 1)

غير رقم السطر والعمود إلى رقم السطر والعمو الذي تريد تلوينه

cell.setBackground(Color.BLUE);

غير إلى أي لون تريده

ومن ثم أضف هذا الكود

table.setDefaultRenderer(Object.class, new MonCellRenderer());

إلى الكلاس الموجود في ال JTable

إذا كان هناك سؤال إطرحه

#4

الف شكر اخواني ,,

تقريبا صارت الفكرة ,, استخدمت الكلاس اخونة bilal2005

الفكرة ايضا تطبقت ,, بس فقط قبل ما يرسم الجدول

  initComponents();

يعني القصد كيف نسوي Redraw ؟؟ او نرفرش مااعرف المصطلح المناسب ,,

تحياتي لكم اخواني ماقصرتو

m16.jpg

سأحمل روحي على راحتي والقي بها في مهاوي الردا

فأما حياة تسر الصديق و اما ممات يغيض العدا

#5
اقتباس
بس مادري اشوفها حيل معقدة يعني استدعى تلث فانكشنات وسوى كلاس علشان هالعملية !!!!!!!!!!!

نعم العملية ليست بالبساطة كما تتوقع

وهي كما وجدت في بحثك وكما وضع الشباب الأكواد

هي ربما طويلة ولكنها ليست صعبة

حاول ان تستفيد من هذه الاكواد و إن كان هناك مشاكل اخرى

فنحن على أستعداد إن شاء الله.

#6
اقتباس
يعني القصد كيف نسوي Redraw ؟؟ او نرفرش مااعرف المصطلح المناسب ,,

إشرح ما تريد ان تقوم به بالظبط

#7

اخوية الغالي ,,

الكلاس الذي ارفقته عمل بشكل سليم ,,

بس انا احتاج ان تتم عملية التلوين حسب Event معين ,,

اي بعد ما يصير initiate for jtable component

فكيف اجعل عملية التلوين فعالة ,, حيث تحتاج ال Panel كلها او jtable الى اعادة رسم Redraw

حتى اللون يبيين ,,,

يعني مثلا لو نضع هالكود

table.setDefaultRenderer(Object.class, new MonCellRenderer());

في كليك ايفينت ل button معين مارح تتنفذ عملية التلوين الا اذا كبرنة او صغرنة ال panel بحيث يصير اعادة رسم

اتمنى تكون مشكلتي واضحة ,,

وفعلا اخوية انس ,, الجافا شوية مزعجة بأشياء قد تكون تصير بثواني بلغات مثل الدوت نيت ,,

تحياتي

m16.jpg

سأحمل روحي على راحتي والقي بها في مهاوي الردا

فأما حياة تسر الصديق و اما ممات يغيض العدا

#8

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

#9

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

أخي ما فهمت سؤالك

إذا كان ممكن تبين لنا كود الevent الذي تتكلم عنه

#10

اي event مثلا بضغطة زر يتلون صف معين ,,

هالعملية لا تتم اذا ماصار اعادة رسم للجدول او خلية معينة

m16.jpg

سأحمل روحي على راحتي والقي بها في مهاوي الردا

فأما حياة تسر الصديق و اما ممات يغيض العدا

#11

جرب

table.repaint()

داخل الevent

#12

تمام اشتغلت ,, :thumb_up:

شكرا لك اخوية ,,

وبأنتظار اخوية بلال اذا عندة فكرة اخرى :rolleyes:

m16.jpg

سأحمل روحي على راحتي والقي بها في مهاوي الردا

فأما حياة تسر الصديق و اما ممات يغيض العدا

#13

ممكن تستعمل كما قال لك الاخ herch

table.repaint()

أنا ذهني كان ذهب بعيد فكرت في أمور أخرى لكن هذا الكود أبسط بالنسبة إلى ما تريده انت

إعادة الرسم موجودة في كل لغات البرمجة أي عندما تكت أي شيء في نافدة وعنما تكبر النافدة أو تصغرها يمحى أي شيء يكون داخل النافدة

إذن الحل هو إعادة رسم محتوى النافاغدة عند كل حدث يقع على النافدة

على العموم إذا أردت أي شيء آخر أو إذا الفكرة لم تفهمها جيدا إطرحها

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