"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo habilitar la selección de celdas no continua en JTable?

¿Cómo habilitar la selección de celdas no continua en JTable?

Publicado el 2024-11-16
Navegar:290

How to Enable Non-Continuous Cell Selection in JTable?

Selección de celdas no continuas en JTable

En JTable, el modo de selección predeterminado solo permite la selección de celdas contiguas. Para permitir la selección de celdas individuales y no continuas, se pueden considerar los siguientes enfoques:

1. CTRL MOUSE_CLICK:

Si setSelectionMode(ListSelectionModel.SINGLE_SELECTION) no está configurado, mantener presionada la tecla CTRL mientras hace clic en las celdas permite realizar múltiples selecciones de celdas no continuas.

2. ListSelectionModel modificado:

Como ListSelectionModel es compartido por JTable y JList, se puede utilizar el siguiente ListSelectionModel modificado:

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);
    }
}

Este modelo se puede aplicar a JTable usando setSelectionModel(new NonContSelectionModel()).

Demostración:

El siguiente fragmento de código crea un JTable que permite la selección de celdas no continua utilizando el ListSelectionModel modificado:

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);
            }
        });
    }
}
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3