"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تمكين تحديد الخلايا غير المستمر في JTable؟

كيفية تمكين تحديد الخلايا غير المستمر في JTable؟

تم النشر بتاريخ 2024-11-16
تصفح:924

How to Enable Non-Continuous Cell Selection in JTable?

تحديد الخلايا غير المستمرة في JTable

في JTable، يسمح وضع التحديد الافتراضي بتحديد الخلايا المتجاورة فقط. لتمكين اختيار الخلايا الفردية وغير المستمرة، يمكن النظر في الأساليب التالية:

1. CTRL MOUSE_CLICK:

إذا لم يتم تعيين setSelectionMode(ListSelectionModel.SINGLE_SELECTION)، فإن الضغط باستمرار على المفتاح CTRL أثناء النقر على الخلايا يسمح بتحديد خلايا متعددة غير مستمرة.

2. Modified ListSelectionModel:

نظرًا لأن ListSelectionModel مشترك بواسطة كل من JTable وJList، يمكن استخدام ListSelectionModel المعدل التالي:

import java.awt.Component;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;

import javax.swing.*;

public class NonContSelectionModel extends DefaultListSelectionModel {

    @Override
    protected void processMouseEvent(MouseEvent e) {
        int modifiers = e.getModifiers() | InputEvent.CTRL_MASK;
        MouseEvent myME = new MouseEvent((Component) e.getSource(), e.getID(), e.getWhen(), modifiers, e.getX(),
                e.getY(), e.getXOnScreen(), e.getYOnScreen(), e.getClickCount(), e.isPopupTrigger(), e.getButton());
        super.processMouseEvent(myME);
    }
}

يمكن تطبيق هذا النموذج على JTable باستخدام setSelectionModel(new NonContSelectionModel()).

العرض التوضيحي:

يقوم مقتطف الكود التالي بإنشاء JTable الذي يسمح باختيار الخلايا غير المستمر باستخدام ListSelectionModel المعدل:

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;

public class NonContJTableSelection {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JPanel panel = new JPanel();
                String[] columnNames = {"Name", "Age", "Profession"};
                Object[][] data = {
                        {"John Doe", 30, "Software Engineer"},
                        {"Jane Doe", 28, "Doctor"},
                        {"Peter Jones", 45, "Lawyer"}
                };
                JTable table = new JTable(data, columnNames);
                table.setSelectionModel(new NonContSelectionModel());
                JScrollPane scrollPane = new JScrollPane(table);
                panel.add(scrollPane);

                frame.add(panel);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3