Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Buongiorno a tutti, sono nuovo del forum.
Spero qualcuno di voi possa darmi una mano su un problema che mi porto dietro da tempo e di cui non riesco a trovare soluzione ammesso che alla fine non sia un bug di java...
Spiego il progetto Java:
Il problema risiede nell'interfaccia che è composta da:
- JInternalFrame con all'interno
- JTabbedPane con all'interno
- Componenti quali JtextField, JPanel con all'interno JTable, ComboBox etc
Lo spostamento da un componente all'altro, usando la tastiera, è gestito da una classe FocusTraversalPolicy legata al JTabbedPane;
in questa classe si gestisce l'avanzamento di componente in componente con i tasti TAB e ShiftTAB;
tutto funziona meravigliosamente pure nel caso di componente Jtable se non si è ancora in Edit di cella.
Preciso che al componente Jtable ho disattivato i tasti Tab e ShiftTAB perchè non siano utilizzati per movimenti tra celle e possono essere utilizzati per passaggio da JTable a componente successivo o precedente al JTable stesso.
Queste le istruzioni che disattivano i 2 tasti come spostamento celle nel JTable
Il problema che vado a descrivere si manifesta solo quando sono in edit di cella del JTable (componente JTextField) e premo il tasto ShiftTab.
Nel caso sopradescritto non si comporta come mi aspetterei e soprattutto si comporta in modo diverso rispetto a come si comporta avendo premuto il tasto TAB.
Nel caso di edit di cella (JTextField) nel JTable se si preme il tasto TAB il programma si comporta come è nelle mie attese:
- Passa il controllo al FocusTraversalPolicy del JtabbedPane
- Passa da StopCellEditing della cella in edit
- Passa da getCellEditorValue della cella in edit
- Per debug passa pure da un FocusLost di un Listener sulla JTable dove si rileva che il prossimo componente è quello corretto a cui passa effettivamente il focus
- Attiva il focus sul componente successivo
Nel caso di edit di cella (JTextField) nel JTable se si preme il tasto ShiftTAB il programma si comporta come non è nelle mie attese e diversamente dal tasto TAB:
- NON Passa il controllo al FocusTraversalPolicy del JtabbedPane
- NON Passa da StopCellEditing della cella in edit
- NON Passa da getCellEditorValue della cella in edit
- Passa invece da FocusLost di un Listener sulla JTable dove si rileva che il prossimo componente è lo stesso JTextField che gestisce l'edit di cella.
- Rimane attiva la stessa cella della JTable in uno stato non si capisce se di edit o meno.
Spero di essere stato chiaro
L'intero sorgente è troppo esteso per poter essere pubblicato ma non ho problemi a riportarne i pezzi che possono interessare la discussione.
Ultima modifica effettuata da PaoloDaPrato il 16/03/2020 alle 16:38
Buongiorno
Ripropongo un estratto del problema che ho esposto nel primo post sperando che con un esempio pratico qualcuno mi possa dare una mano
Facendo girare l'esempio (trascurato ma funzionale a dimostrare il mio problema) si notano in console i passaggi nel focustraversalpolicy
Prova1: si preme semplicemente TAB o ShiftTab
In console si vedono i passaggi nei metodi getComponentAfter e getComponentBefore; in particolare si vede che, non essendo le celle in edit, nel caso del secondo componente, viene ritornato il componente JScrollPane. Va bene cosi
Prova2: si clicca su una cella JTable, si scrive qualcosa (per entrare in edit) e si preme TAB
In console si vede il passaggio nel metodo getComponentAfter ; in particolare si vede che, avendo il focus la JTable, viene ritornato il componente JTable. Va bene cosi
Prova3: si clicca su una cella JTable, si scrive qualcosa (per entrare in edit) e si preme ShiftTAB
Non succede niente almeno a livello di focustraversalpolicy
Se si preme ancora ShiftTab
In console si vede il passaggio nel metodo getComponentBefore ; in particolare si vede che viene ritornato il componente JTextField usato per l'edit della cella!!!!