إضافة صورة أو أيقونة في JTable

توفر فئة JTable طريقة لإدراج الرموز أو الصور. يحتاج JTable إلى تحديد نوع الكائنات المخزنة في عمود الجدول حتى يتمكن من اختيار العرض المناسب. يتم ذلك عن طريق استدعاء الطريقة getColumnClass(...):

public Class getColumnClass(int column)
{
return getValueAt(0, column).getClass();
}
Java يحدد ما إذا كنت قد حددت عارض JTable أم لا ، وإلا فإن JTable يستدعي القالب ويستدعي نمط getColumnClass () < / span >< span style = "font-family: inherit;" >  < / span > الذي يسترد نوع الخلية في الصف الأول. بعد ذلك ، يقارنها بقائمة أنواع البيانات التي يتم حفظ عمليات التسليم فيها. يتم بدء هذه القائمة بواسطة JTable ، ولكن يمكنك إضافتها أو تحريرها. تتضمن العروض ImageIcon و Icon.

يوضح المثال التالي كيفية إضافة صور إلى عمود:

import javax.swing.*; 
import javax.swing.table.*;

Table_image من الفئة العامة يمتد JFrame
{
Table_image العامة ()
{
ImageIcon icon1 = ImageIcon جديد ("1.png") ؛
رمز ImageIcon 2 = رمز الصورة الجديد ("2.png") ؛
رمز ImageIcon 3 = رمز الصورة الجديد ("3.png") ؛
رمز ImageIcon4 = رمز الصورة الجديد ("4.png") ؛

string [] title = {"نظام التشغيل" ، "الشعبية"} ؛
Object[][] data =
{
{icon1, "Android: 76.6٪"},
{icon2, "IOS: 19.7٪"},
{icon3, "Windows Phone: 2.8٪"},
{icon4, "BlackBerry OS: 1٪"},
};

قالب DefaultTableModel = DefaultTableModel جديد (البيانات ، العنوان) ؛
جدول JTable = JTable جديد (قالب) < br / > {
/ * الكشف التلقائي عن أنواع البيانات
* لجميع الأعمدة
* /
فئة عامة getColumnClass (عمود int)
{
إرجاع getValueAt(0, column).getClass();
}
} ؛
// تغيير ارتفاع الصف
table.setRowHeight(100);
JScrollPane scrollPane = JScrollPane الجديد (الجدول) ؛
getContentPane().add( scrollPane);
}

الفراغ الثابت العام الرئيسي (سلسلة [] args)
{
Table_image الإطار = جديد Table_image () ؛
frame.setDefaultCloseOperation (EXIT_ON_CLOSE) ؛
frame.pack ();
frame.setVisible (صحيح) ؛
}
}
< / pre> النتيجة بعد التنفيذ:

إضافة رمز إضافة صورة إلى jtable

إذا لم تقم بتطبيق نمط getColumnClass ، سيحتوي العمود على نص (اسم الملف) وليس صورا. على سبيل المثال ، بدلا من إدراج شعار Android ، سيعرض JTable "1.png".

إذا كنت تستخدم القالب الخاص بك الذي يرث من  AbstractTableModel< / a> ، لا تنس تنفيذ نمط getColumnClass في فئة النموذج.

class Model يمتد AbstractTableModel{
بيانات الكائن الخاص[][] ؛
عنوان السلسلة الخاصة [] ؛

نموذج عام (كائن [] [] بيانات ، عنوان السلسلة [] ) {
this.data = data ؛
this.title = title ؛
}

public Class getColumnClass(int column)
{
return getValueAt(0, column).getClass();
}

int public getColumnCount () {
إرجاع this.title.length ؛
}

int getRowCount () {
إرجاع this.data.length ؛
}

كائن عام getValueAt(int row, int col) {
إرجاع this.data[row][col];
}
}
اقرأ المزيد عن المحررين والعارضين على موقع جافا الرسمي:
Editors and Renderers.