Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [Java - Eclipse] rendere una colonna JTable non selezionabile

    Ciao ragazzi ho di nuovo bisogno di voi.
    Devo creare una tabella di tre che mi dia la possibilità di selezionare una cella solamente dalla prima colonna. Ho reso la tabella non editabile sovrascrivendo il metodo isCellEditable, ho provato a guardare nell'Api, ho trovato il metodo isColumnSelected ma sovrascrivendolo non funziona. Esiste un altro metodo che mi sfugge? O Come è possibile fare altrimenti?
    posto il codice della creazione della tabella

    codice:
    private JTable tableSN(Vector righe, Vector colonne) {
    		JTable table = new JTable(righe,colonne) {         //sovrascriv il metodo is CellEditable impostando 
    			@Override public boolean isCellEditable(int row, int column) { 
    				return false;
    			}
    		
                           @Override public boolean isColumnSelected(int column) { 
    				return (column!=0);
    			}	
    		};
    		return table;
    	}
    grazie in anticipo delle eventuali risposte

  2. #2

    ciao

    nessuno ha qualche idea??

  3. #3
    la risposta è proprio sotto i tuoi occhi...
    codice:
    private JTable tableSN(Vector righe, Vector colonne) {
    		JTable table = new JTable(righe,colonne) {         //sovrascriv il metodo is CellEditable impostando 
    			@Override public boolean isCellEditable(int row, int column) {
                                    if(column == 0) // se è la prima colonna
                                    {
                                        return true;
                                    }else{ 
    				 return false;
    			       }
                           }
    		
                           @Override public boolean isColumnSelected(int column) { 
    				return (column!=0);
    			}	
    		};
    		return table;
    	}

  4. #4

    grazie....ma

    così faccio la prima colonna modificabile e le altre no...io devo fare che tutte le colonne siano NON modificabili e in modo che si possa selezionare celle della prima colonna e nessuna delle altre...in un certo senso come se le altre colonne fossero disabilitate

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Potresti risolvere il problema aggiungendo un ListSelectionListener.
    Quando vieni notificato del cambiamento della selezione, verifichi se l'indice di colonna selezionato appartiene a quelli da non selezionare. Se così è, chiami un clearSelection() sulla JTable.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6

    ottima idea!

    stavo provando...ma come posso implementarlo? non sono molto pratico e non ho mai utilizzato questo listener...
    ho fatto questo..
    codice:
    private JTable tableSN(Vector righe, Vector colonne) {
    		JTable table = new JTable(righe,colonne) {         //sovrascrivo il metodo is CellEditable impostando 
    			@Override public boolean isCellEditable(int row, int column) { // la JTable non modificabile
    				return false;
    			}
    		};
    		
    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    		ListSelectionModel tab = table.getSelectionModel();
    		tab.addListSelectionListener(new ListSelectionListener() {
    			public void valueChanged(ListSelectionEvent e) {
    				ListSelectionModel lsm = (ListSelectionModel)e.getSource();
                                            if (lsm ==
    grazie
    come posso andare avanti?

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Questo è il ListSelectionListener (nell'esempio, ho fatto in modo che non si possa selezionare la terza colonna, puoi adattarlo come vuoi):

    codice:
       @Override
       public void valueChanged(ListSelectionEvent lse) {
          if ( !lse.getValueIsAdjusting() ) {
             int numColonna = tabella.getSelectedColumn();
             if (numColonna == 2) {
                // Non voglio che si possa selezionare la terza colonna
                tabella.clearSelection();
             }
          }
       }
    Tale listener va aggiunto al ListSelectionModel del ColumnModel della tabella:

    codice:
    ListSelectionModel model = tabella.getColumnModel().getSelectionModel();
    model.addListSelectionListener( tuoListener );
    Perchè il SelectionModel di default (quello raggiungibile dall'oggetto JTable) è il modello per le righe, non per le colonne.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8

    funziona!!!!...grazie...

    con calma però me lo vado a studiare questo listener..
    ti devo un caffè!!!!

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.