Ehilà! Come fornitore di schermi swing, ho avuto la mia giusta dose di esperienze che si occupavano di tutti i tipi di aspetti tecnici relativi a questi eleganti dispositivi. Una domanda che si presenta abbastanza spesso è come gestire gli eventi di selezione delle celle della tabella su uno schermo swing. In questo blog, ti guiderò attraverso il processo passo dopo passo e condividerò alcuni suggerimenti e trucchi che ho raccolto lungo la strada.
Prima di tutto, parliamo del perché la gestione degli eventi di selezione delle cellule del tavolo è importante. Quando lavori con uno schermo swing, potresti avere una tabella che visualizza un sacco di dati. E a volte, vuoi fare qualcosa quando un utente seleziona una particolare cella in quella tabella. Forse vuoi mostrare informazioni più dettagliate sui dati in quella cella o vuoi eseguire alcune azioni in base alla selezione. Qualunque sia il motivo, essere in grado di gestire questi eventi in modo efficace può migliorare notevolmente l'esperienza utente della tua applicazione.
Quindi, come gestiamo gli eventi di selezione delle cellule del tavolo? Bene, la prima cosa che devi fare è capire la struttura di base di una tabella in un'applicazione swing. In Java Swing, i tavoli sono rappresentati dalJtableclasse. Questa classe offre molte funzionalità per la creazione e la gestione delle tabelle, inclusi gli eventi di selezione della gestione.
Per gestire gli eventi di selezione delle celle della tabella, è necessario aggiungere unListSelectionListeneral modello di selezione della tabella. Il modello di selezione è responsabile di tenere traccia di quali celle sono attualmente selezionate nella tabella. Ecco un semplice esempio di come puoi farlo:
import javax.swing.*; import javax.swing.event.listselectionEvent; import javax.swing.event.listselectionlistener; Classe pubblica TableSelectionExample {public static void main (string [] args) {// crea una nuova stringa jtable [] columnNames = {"nome", "age", "città"}; Object [] [] data = {{"John", 25, "New York"}, {"Jane", 30, "Los Angeles"}, {"Bob", 35, "Chicago"}}; Jtable table = new jtable (dati, nomi colonnari); // Ottieni il modello di selezione della tabella ListSelectionModel SelectionModel = Table.GetSelectionModel (); // Aggiungi un ListSelectionListener al modello di selezione SelezioneModel.AddListSelectionListener (new ListSelectionListener () {@Override public void ValueChanged (ListSelectionEvent e) {if (! E.GetValueSadjusting ()) {int selectEctedRow = table.getSelectedRow (); int selectColumn (SelectedRow! = -1 && SelectedColumn! = -1) {Object SelectedValue = Table.GetValueat (selectedRow, selectedColumn); // Crea un JFrame e aggiungi la tabella JFrame frame = new JFrame ("Esempio di selezione della tabella"); frame.add (nuovo jscrollpane (tabella)); frame.setDefaultCloseOperation (jFrame.Exit_on_Close); frame.pack (); frame.setVisible (true); }}
In questo esempio, creiamo prima un nuovoJtablecon alcuni dati di esempio. Quindi, otteniamo il modello di selezione del tavolo e aggiungiamo unListSelectionListenerad esso. ILValuchangemetodo delListSelectionListenerviene chiamato ogni volta che la selezione nella tabella cambia. All'interno di questo metodo, controlliamo se la selezione viene ancora regolata (per evitare più chiamate quando l'utente sta trascinando il mouse per selezionare più celle). Se la selezione non viene regolata, otteniamo gli indici di riga e colonna selezionati e quindi recuperare il valore della cella selezionata usando ilgetValueatmetodo delJtableclasse.
Ora, supponiamo che tu voglia fare qualcosa di più complesso quando viene selezionata una cella. Ad esempio, potresti voler mostrare una finestra di dialogo con informazioni più dettagliate sui dati nella cella selezionata. Ecco come puoi modificare l'esempio precedente per raggiungere questo obiettivo:
import javax.swing.*; import javax.swing.event.listselectionEvent; import javax.swing.event.listselectionlistener; Classe pubblica TableSelectionExample {public static void main (string [] args) {// crea una nuova stringa jtable [] columnNames = {"nome", "age", "città"}; Object [] [] data = {{"John", 25, "New York"}, {"Jane", 30, "Los Angeles"}, {"Bob", 35, "Chicago"}}; Jtable table = new jtable (dati, nomi colonnari); // Ottieni il modello di selezione della tabella ListSelectionModel SelectionModel = Table.GetSelectionModel (); // Aggiungi un ListSelectionListener al modello di selezione SelezioneModel.AddListSelectionListener (new ListSelectionListener () {@Override public void ValueChanged (ListSelectionEvent e) {if (! E.GetValueSadjusting ()) {int selectEctedRow = table.getSelectedRow (); int selectColumn ) // Crea un JFrame e aggiungi la tabella JFrame frame = new JFrame ("Esempio di selezione della tabella"); frame.add (nuovo jscrollpane (tabella)); frame.setDefaultCloseOperation (jFrame.Exit_on_Close); frame.pack (); frame.setVisible (true); }}
In questo esempio modificato, utilizziamo ilJoptionPaneClasse per mostrare una finestra di dialogo con il valore selezionato quando viene selezionata una cella.
Un'altra cosa che potresti voler fare è gestire più selezioni di celle. Per impostazione predefinita, ilJtableconsente all'utente di selezionare più celle trattenendo ilCtrltasto (su Windows) o ilComandoChiave (su Mac) mentre si fa clic sulle celle. Per gestire più selezioni di celle, è possibile eseguire il ciclo attraverso le righe e le colonne selezionate ed eseguire l'azione desiderata per ciascuna cella selezionata. Ecco un esempio:
import javax.swing.*; import javax.swing.event.listselectionEvent; import javax.swing.event.listselectionlistener; Classe pubblica TableSelectionExample {public static void main (string [] args) {// crea una nuova stringa jtable [] columnNames = {"nome", "age", "città"}; Object [] [] data = {{"John", 25, "New York"}, {"Jane", 30, "Los Angeles"}, {"Bob", 35, "Chicago"}}; Jtable table = new jtable (dati, nomi colonnari); // Ottieni il modello di selezione della tabella ListSelectionModel SelectionModel = Table.GetSelectionModel (); // Add a ListSelectionListener to the selection model selectionModel.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { if (!e.getValueIsAdjusting()) { int[] selectedRows = table.getSelectedRows(); int[] selectedColumns = table.getSelectedColumns (); // Crea un JFrame e aggiungi la tabella JFrame frame = new JFrame ("Esempio di selezione della tabella"); frame.add (nuovo jscrollpane (tabella)); frame.setDefaultCloseOperation (jFrame.Exit_on_Close); frame.pack (); frame.setVisible (true); }}
In questo esempio, usiamo ilgetSelectedrowsEgetSelectedColumnsMetodi delJtableClasse per ottenere array degli indici di riga e colonna selezionati. Quindi, passiamo attraverso questi array e recupiamo il valore di ciascuna cella selezionata.


Come fornitore di schermo swing, ho scoperto che queste tecniche per la gestione degli eventi di selezione delle cellule della tabella possono essere molto utili in una varietà di applicazioni. Sia che tu stia costruendo un sistema di gestione dei dati, uno strumento di reporting o qualsiasi altra applicazione che utilizza le tabelle, essere in grado di gestire efficacemente gli eventi di selezione possono rendere la tua applicazione più intuitiva e potente.
Se sei sul mercato per le attrezzature per polpa di carta, offriamo anche alcuni ottimi prodotti come ilPulp per tamburi rotanti a doppia mesh, ILMacchina per lacrime di cartae ilReattore orizzontale. Questi prodotti sono progettati per soddisfare le esigenze dell'industria della pasta di carta e possono aiutarti a migliorare l'efficienza della produzione.
Se sei interessato a saperne di più sui nostri schermi swing o su uno degli altri nostri prodotti, sentiti libero di contattarci per una negoziazione di acquisto. Siamo sempre felici di aiutarti e non vediamo l'ora di lavorare con te!
Riferimenti:
- "Java Swing Tutorial" - Documentazione Oracle
- "Java efficace" - Joshua Bloch
