Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Implementare keylistener su JTable

    Salve ragazzi,

    ho la necessità di implementare un Keylistener sulla mia JTable, in pratica ho una JTable che ha tutte le colonne editabili forchè la prima.

    Io voglio che se viene selezionata la prima colonna e premuto il tasto canc tutta la riga venga eliminata.

    Posto il codice del mio tableModel

    codice:
    	 static class MyTableModel extends DefaultTableModel {
    		    private static final Object[] columnNames = { "INGREDIENTI", "in %","Quantità"};
    
    		    public MyTableModel() {
    		        super(columnNames, 10);    // 10 righe iniziali (vuote)
    		    }
    
    		    public boolean isCellEditable(int rowIndex, int columnIndex) {
    		    	return (columnIndex != 0);   //prima colonna non editabile
      
    		    }
    
    		    public Class getColumnClass(Float columnIndex) {
    		        return Float.class;    // Le due colonne sono numeri interi
    		    }
    
    		    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    		        super.setValueAt(aValue, rowIndex, columnIndex);
    
    		   }
    			
    			
    		}//fine classe datatablemodel
    aspetto vostre notizie

    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Implementare keylistener su JTable

    Originariamente inviato da bircastri
    ho la necessità di implementare un Keylistener sulla mia JTable, in pratica ho una JTable che ha tutte le colonne editabili forchè la prima.

    Io voglio che se viene selezionata la prima colonna e premuto il tasto canc tutta la riga venga eliminata.
    Forse volevi dire "tutta la colonna venga eliminata" o volevi dire "se viene selezionata la prima riga" ?? Non è chiaro.

    Comunque per registrare un KeyListener non ci sono problemi. L'unica "grana" è che se sei su una cella editabile, se premi "canc" si entra anche in fase di editazione della cella. Si può comunque impedire in un modo o nell'altro.

    E per il resto (la eliminazione) visto che usi DefaultTableModel se è una riga che deve essere eliminata, c'è un metodo apposito (removeRow), se invece intendevi proprio eliminare una colonna, è più problematico (perché non c'è un metodo diretto per farlo) ma in un qualche modo e con qualche passaggio si può di certo fare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    allora il discorso è questo.

    Ho una tabella con 8 colonne di cui solo la prima colonne non è editabile.

    Io voglio che quando l'untente ha intenzione di eliminare una RIGA deve andare a selezionare la cella (colonna 0 riga n) premere canc ed eliminare l'intera riga....

    Come faccio?? Ho visto il metodo per eliminare una riga c'è ma non so come implementare il keylistener

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    più che un keylistener metterei un mouselistener (con relativo popup)

  5. #5
    potete farmi degli esempi??

    io quello che voglio spero di essere stato chiaro.

    A me serve un qualcosa (ed escluderei un JButton) per cancellare una riga selezionata dall'utente.

    L'unica cosa che bisogna stare attenti, è che 7 su 8 colonne sono editabili e quindi l'utente può benissimamente utilizzare il tasto canc per eliminare qualche carattere digitato male.

    Mentre il tasto canc se è selezionata una riga della colonna 0 deve eliminare tutta la riga

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ti ripeto, eviterei di complicarmi la vita andando a gestire un keylistener...cioè fallo se strettamente necessario. Perchè tu passi per il default table model, ma aggiorni effettivamente il dato che visualizzi o aggiorni la vista?se si quando? come gestisci canc? ma canc vorrebbe dire cancella quanto scritto.
    Quindi farlo fare con il mouse (e ci sono una marea di esempi navigando su google) mi sembra la soluzione più semplice

    poi mi togli una curiosità: tutte ste domande sulle swing, non provi a cercare da te su google per vedere se trovi qualcosa? non provi a capire come funzionano da solo e a fare da solo?

  7. #7
    ascolta tu non hai idea di quante cose dovrei chiedere ogni giorno. Purtroppo sono alle prima armi in Java e sopratutto più he java sulle componenti swing

    Comunque mi andrebbe anche bene il menu di pop up che dici anche se nono ho mai visto nulla del genere.

    Mi puoi fornire qualche link utile???

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ora non mi ricordo, dovrei mettermi a cercarle...guarda sulla guida oracle how to use popup menu

    e in ogni caso l'esperienza tua cresce cercando da solo soluzioni a tutte ste robe, la libreria swing è enorme e non la conosco manco bene, ma alcune soluzioni non le puoi arrabattare su forum...tipo ora un tuo model ti aiuterebbe in tante cose

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    se può servirti:
    codice:
    private class MyKeyListener extends KeyAdapter {
            private JTable table;
            private MyTableModel model;
    
            public MyKeyListener(JTable table) {
                this.table = table;
                this.model = (MyTableModel)table.getModel();
            }
    
            public void keyReleased (KeyEvent ke) {
                if (table.getSelectedColumn() == 0) {                
                    if (ke.getKeyCode() == 127) { //KeyEvent.VK_CANCEL non mi funziona ?!?
                        model.removeRow(table.getSelectedRow());
                    }
                    else {
                        System.out.println("Wrong key");
                    }
                }
                else {
                    System.out.println("Non ci siamo");
                }
            }
        }
    è il pezzo saliente.
    Questa l'intera classe di test
    codice:
    import java.awt.event.*;
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.table.*;
    
    public class JTableModelDemo extends JFrame {
    
        public JTable table;
        public JScrollPane scrollPane;
    
        private class MyKeyListener extends KeyAdapter {
            private JTable table;
            private MyTableModel model;
    
            public MyKeyListener(JTable table) {
                this.table = table;
                this.model = (MyTableModel)table.getModel();
            }
    
            public void keyReleased (KeyEvent ke) {
                if (table.getSelectedColumn() == 0) {                
                    if (ke.getKeyCode() == 127) {
                        model.removeRow(table.getSelectedRow());
                    }
                    else {
                        System.out.println("Wrong key");
                    }
                }
                else {
                    System.out.println("Non ci siamo");
                }
            }
        }
    
        private class MyTableModel extends DefaultTableModel {
            Object[] columnNames;
            Object[][] data;
    
            public MyTableModel(Object[][] data, Object[] columnNames) {
                super(data, columnNames);
                this.columnNames = columnNames;
                this.data = data;
            }
            
            public MyTableModel() {
                this(                    
                        new Object[][] {
                            {"100010", "Bin", "Ario", "34"},
                            {"3434", "John", "Doe", "2010"},
                            {"666", "Xabaras", "Belzebù", "Troppi"}
                        },
                        new Object[] {"Id", "Nome", "Cognome", "Età"}
                );
            }
    
            public boolean isCellEditable(int row, int col) {
                return (col > 0);
            }      
    
        }
    
        public JTableModelDemo() {
            super("Table Model Demo");
    
            table = new JTable(new MyTableModel());
            scrollPane = new JScrollPane(table);
            this.getContentPane().add(scrollPane, BorderLayout.CENTER);
    
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
            table.setVisible(true);
            table.addKeyListener(new MyKeyListener(table));
            this.pack();
    
        }
    
        public static void main (String[] args) {
            new JTableModelDemo();
        }
    
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Ma restano comunque validissimi i suggerimenti e commenti di andbin e valia: ad esempio, non capisco perché VK_CANCEL (motivo per cui uso il codice 127) non funzioni o non funzioni come mi aspetterei... appena posto qui, vado a vedere nella documentazione se ho mal interpretato il significato.

    Se copiassi da un forum senza farmi troppe domande, come programmatore non progredirei mai. E' tanta roba, soprattutto all'inizio (e ti assicuro che è ancora più roba quando sei un utente come me, che niente ha più a che fare con il mondo della programmazione), però lo stimolo di andare a vedere come funziona cosa lo devi trovare da te.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.