Heim >Java >javaLernprogramm >Wie aktiviere ich die nicht kontinuierliche Zellenauswahl in JTable?

Wie aktiviere ich die nicht kontinuierliche Zellenauswahl in JTable?

DDD
DDDOriginal
2024-11-08 16:41:021011Durchsuche

How to Enable Non-Continuous Cell Selection in JTable?

Auswählen nicht zusammenhängender Zellen in JTable

In JTable erlaubt der Standardauswahlmodus nur die Auswahl zusammenhängender Zellen. Um eine individuelle, nicht-kontinuierliche Zellselektion zu ermöglichen, können folgende Ansätze in Betracht gezogen werden:

1. CTRL MOUSE_CLICK:

Wenn setSelectionMode(ListSelectionModel.SINGLE_SELECTION) nicht festgelegt ist, ermöglicht das Gedrückthalten der STRG-Taste beim Klicken auf Zellen die Auswahl mehrerer nicht kontinuierlicher Zellen.

2. Modifiziertes ListSelectionModel:

Da ListSelectionModel sowohl von JTable als auch von JList gemeinsam genutzt wird, kann das folgende modifizierte ListSelectionModel verwendet werden:

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

Dieses Modell kann auf JTable angewendet werden, indem setSelectionModel( neues NonContSelectionModel()).

Demonstration:

Der folgende Codeausschnitt erstellt eine JTable, die eine nicht kontinuierliche Zellenauswahl mithilfe des geänderten ListSelectionModel ermöglicht:

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

Das obige ist der detaillierte Inhalt vonWie aktiviere ich die nicht kontinuierliche Zellenauswahl in JTable?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn