منتدى مصر التقني
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

إضافة جداول JTable فى المكون الرسومي JComboBox

اذهب الى الأسفل

إضافة جداول JTable  فى المكون الرسومي JComboBox Empty إضافة جداول JTable فى المكون الرسومي JComboBox

مُساهمة من طرف NEXT الخميس فبراير 06, 2020 7:35 pm

أهلا بكم

سنقوم في هذا المقال بتخصيص المكون #JComboBox بحيث تقبل عناصره الجداول (#JTable) بدلاً من النص البسيط وذلك كما فى الشكل التالى :

إضافة جداول JTable  فى المكون الرسومي JComboBox Jtable-in-combo

الخطوات :

1_فى هذه الخطوة سنجعل #JComboBox يتكون من عناصر ..كل عنصر سيكون عبارة عن جدول وعنوان الجدول ، ولهذا يجب علينا إنشاء فئة خاصة بنا وليكن باسم (ItemCombo.java) على النحو التالي:

الكود:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class ItemCombo extends JPanel {    
    
    private JTable tabla;
    private JLabel tablaNombre;

    
    public ItemCombo() {
        super();
        init();
    }
    
    private void init() {
        tabla = new JTable();
        tablaNombre = new JLabel();

        // أبعاد المكون
       setPreferredSize(new Dimension(300, 100));

        JScrollPane scroll = new JScrollPane();
        scroll.setViewportView(tabla);

        //إنشاء حاوية
        JPanel jPanel1 = new JPanel();
        jPanel1.setBackground(new Color(0, 0, 200));
        jPanel1.setPreferredSize(new Dimension(0, 16));
        jPanel1.setLayout(new GridBagLayout());

        //لون النص
        tablaNombre.setForeground(new Color(255, 255, 255));
        jPanel1.add(tablaNombre);

        //تخطيط للمكون
        setLayout(new BorderLayout());
        
        //يتم إضافة مكونات العنوان والجدول
        add(jPanel1, BorderLayout.NORTH);
        add(scroll, BorderLayout.CENTER);        
    }        
        
    public String getNombreTabla() {
        return tablaNombre.getText();
    }

    public void setNombreTabla(String nombreTabla) {        
        tablaNombre.setText(nombreTabla);
    }

    public DefaultTableModel getTablaModel() {
        return (DefaultTableModel) tabla.getModel();
    }

    public void setTablaModel(DefaultTableModel tablaModel) {        
        this.tabla.setModel(tablaModel);
    }
    
}


2_الآن يجب أن نعلم #JComboBox كيفية تقديم كل عنصر من عناصر القائمة أعلاه ، لهذا سنقوم بانشاء الفئة  ItemComboRenderer.java نضيف الكود التالي:

الكود:
public class ItemComboRenderer extends ItemCombo implements ListCellRenderer{
    
    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index,
            boolean isSelected, boolean cellHasFocus)
    {
        if (value != null) {// اذا كان هناك عنصر
            
            setTablaModel(((ItemCombo) value).getTablaModel());
            setNombreTabla(((ItemCombo) value).getNombreTabla());            
            
            // إذا تم تحديد العنصر ، فلن يعرض الجدول
             // لكن فقط اسم الجدول
            if (index == -1) {
                JLabel label = new JLabel(getNombreTabla());
                return label;
            }
           / / عرض الجدول بالكامل
            return this;
        } else {//يتم عرض تسمية فارغة
            JLabel label = new JLabel();
            return label;
        }
    }
    

}


3_نفتح نموذج #JFrame الخاص بنا في وضع التصميم ونضيف #JComboBox بأبعاد 320 × 30 كما فى الشكل التالى :

إضافة جداول JTable  فى المكون الرسومي JComboBox Jcombo_jtable

4_نفتح JFrame في وضع الكود وفي مُنشئ الفئة نعلن عن  #DefaultComboBoxModel لبيانات combobox على النحو التالى :

الكود:
DefaultComboBoxModel model = new DefaultComboBoxModel();

بعد ذلك ، نضيف عنصرًا أولًا كما يلي ، نقوم بإنشاء مثيل جديد لمكون ItemCombo الخاص بنا ، ونضيف اسمًا للجدول و DefaultTableModel لبيانات الجدول.

أخيرًا نضيف هذا item1 إلى نموذج combobox

الكود:
/**
 * Item #1
 */
ItemCombo item1 = new ItemCombo();
item1.setNombreTabla("Tabla de Productos");
DefaultTableModel tablemodel1 = new DefaultTableModel(new Object[][]{
    {"Mesa de Roble", "100 Uds.", "200 $us."},
    {"Estante de Pino", "24 Uds.", "69 $us"},
    {"Cabecera de cama", "3 Uds.", "1.200 $us"}
},
new Object[]{"Nombre", "Cantidad", "Precio"});
item1.setTablaModel(tablemodel1);
model.addElement(item1);

الإجراء أعلاه لإضافة المزيد من العناصر .

5_أخيرًا ، نضيف النموذج وجهاز العارض إلى combobox كما يلي:

الكود:
jComboBox1.setModel(model);
jComboBox1.setRenderer(new ItemComboRenderer());


الكود الكامل للخطوتين 4 و 5 على النحو التالى :

الكود:
  //Model para el ComboBox
        DefaultComboBoxModel model = new DefaultComboBoxModel();

        /**
         * Item #1
         */
        ItemCombo item1 = new ItemCombo();
        item1.setNombreTabla("Tabla de Productos");
        DefaultTableModel tablemodel1 = new DefaultTableModel(new Object[][]{
            {"Mesa de Roble", "100 Uds.", "200 $us."},
            {"Estante de Pino", "24 Uds.", "69 $us"},
            {"Cabecera de cama", "3 Uds.", "1.200 $us"}
        },
                new Object[]{"Nombre", "Cantidad", "Precio"});
        item1.setTablaModel(tablemodel1);
        model.addElement(item1);

        /**
         * Item #2
         */
        ItemCombo item2 = new ItemCombo();
        item2.setNombreTabla("Tabla de Servicios");
        DefaultTableModel tablemodel2 = new DefaultTableModel(new Object[][]{
            {"Medicina Interna", "09:00 a 12:00", "100 $us."},
            {"Nutrición", "14:00 a 18:00", "40 $us"},
            {"Traumatologia", "10:00 a 13:00", "77 $us"}
        },
                new Object[]{"Nombre", "Horario", "Consulta"});
        item2.setTablaModel(tablemodel2);
        model.addElement(item2);      
        
        jComboBox1.setModel(model);
        jComboBox1.setRenderer(new ItemComboRenderer());



و النتيجة :

إضافة جداول JTable  فى المكون الرسومي JComboBox Jtable-in-combo
تحياتى لكم

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
إضافة جداول JTable  فى المكون الرسومي JComboBox Do.php?imgf=154090993464951
NEXT
NEXT
الادارة
الادارة

تاريخ التسجيل : 18/02/2011
المساهمات : 446
النقاط : 200660
التقيم : 28
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

إضافة جداول JTable  فى المكون الرسومي JComboBox Empty رد: إضافة جداول JTable فى المكون الرسومي JComboBox

مُساهمة من طرف زهراء الجمعة فبراير 07, 2020 12:39 pm

كعادتك دائما تاتينا بافكار اكثر من رائعة شكرا جزيلا @NEXT
زهراء
زهراء
........
........

تاريخ التسجيل : 18/02/2011
المساهمات : 438
النقاط : 769
التقيم : 67
الدولة : مصر
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى