Visualizzazione dei risultati da 1 a 10 su 12

Hybrid View

  1. #1
    Perfetto.
    Funziona alla grande.

    nel TableModelFrame:
    codice:
    public class TableModelFrame extends DefaultTableModel {//ormai ho estesto il DefaultTableModel e fuziona bene
       ...
        private boolean buttonsVisible;
        ...
    
        public TableModelFrame(Object[][] data, Object[] title, String tipo) {      ...
           ....
           buttonsVisible=true;
        }
    
        public void setButtonVisible(boolean visible){
            this.buttonsVisible=visible;
        }
    
        public boolean isCellEditable(int row, int column) {
           ....
           ....
           ....
           if(buttonsVisible) {         
              if(column==3 || column==4 || column==7 )  return true;
              else return false;
          }
          else return false;
          
        }
    
    ...
    ...

    e facilmente nello SwingWorker:
    codice:
    class SwingWorkerClass extends SwingWorker<Void, Void> {   
        private ProgressPanel progressBar;
        private Risultato r;
        private ButtonEditor ed;
        private TableModelFrame a_model;
    
    
        public SwingWorkerClass(ProgressPanel aProgressBar, ButtonEditor ed, Risultato ris, TableModelFrame m_model) {        
            this.progressBar = aProgressBar;
            r=ris;
            this.ed=ed;
            a_model=m_model;
            a_model.setButtonVisible(false);
            progressBar.setVisible(true);
        
        }
    
    
        @Override
        public Void doInBackground() {
            //long running task
            ed.modifyResult(r);
            return null;
        }    
    
    
        @Override
        public void done() {                
            a_model.setButtonVisible(true);
            progressBar.setVisible(false);      
        }


    Ma se io volessi anche rendere quel bottone come se fosse disabled (in grigetto per intenderci) come dovrei operare?ù
    Dovrei modificare il renderer dei bottoni? (fra l'altro già presente nella mia classe ButtonRenderer)


    Grazie.
    Ultima modifica di schumy2000; 25-02-2016 a 12:32
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da schumy2000 Visualizza il messaggio
    Ma se io volessi anche rendere quel bottone come se fosse disabled (in grigetto per intenderci) come dovrei operare?
    Chissà perché ma mi aspettavo che lo chiedevi, perché è abbastanza utile/logico.

    Innanzitutto, solo a livello dei nomi, nel tuo codice parli di setButtonVisible, buttonsVisible, ecc.. ma in realtà questo non ha a che fare con la "visibilità" ma con la editabilità. E riguardo alle celle vuol dire poter cliccare o meno il pulsante e quindi è sostanzialmente una questione di "abilitazione" (per questo ti avevo detto setButtonsEnable). Ma è solo una questione di nome ... poco conto.

    Torniamo alla questione del disabled. Servono 2 cose:

    Innanzitutto hai sicuramente implementato un renderer apposito. Lì dentro ricevi il JTable, row/column e altro nel metodo getTableCellRendererComponent. row/column sono gli indici nella view (non nel model!) e quindi sono appropriati per usarli nel isCellEditable di JTable (e non del model). Quindi invochi isCellEditable per quella cella del pulsante e setti il true/false direttamente al setEnabled del pulsante.

    Ma così non è ancora completo. Quando invochi il tuo setButtonVisible sul table model adesso aggiorni solo la variabile di istanza. Questo di per sé non causa alcun aggiornamento "visivo". Serve fare anche il "fire" dell'evento di notifica apposito. Purtroppo tra i vari fireXXX() di AbstractTableModel non ce n'è uno apposito che descrive la modifica su una intera colonna. Ma TableModelEvent è in grado di rappresentare questo tipo di aggiornamento. Ti basta usare il costruttore:

    TableModelEvent(TableModel source, int firstRow, int lastRow, int column)

    A quel punto: quando invochi setButtonVisible: a) aggiorni la variabile di istanza, b) notifichi l'update di quella colonna dei pulsanti, c) JTable scatenerà l'update visivo che invocherà di nuovo il renderer per le celle di quella colonna e quindi il setEnabled che ho detto prima verrà usato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2026 vBulletin Solutions, Inc. All rights reserved.