الوقت/التاريخ الآن هو الثلاثاء أبريل 13, 2021 7:19 am

1 نتيجة بحث عن JComboBox

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

أهلا بكم

سنقوم في هذا المقال بتخصيص المكون #JComboBox بحيث تقبل عناصره الجداول (#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 كما فى الشكل التالى :

الوسم 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());




و النتيجة :

الوسم jcombobox على المنتدى منتدى مصر التقني Jtable-in-combo
تحياتى لكم
من طرف NEXT
في الخميس فبراير 06, 2020 7:35 pm
 
ابحث في: واجهة المستخدم الرسومية Java Swing
موضوع: إضافة جداول JTable فى المكون الرسومي JComboBox
المساهمات: 1
مشاهدة: 300

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

انتقل الى: