16/03/20 15:36
PaoloDaPrato
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.
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
ActionMap myTableActionMap = myTable.getActionMap(); myTableActionMap.put("selectPreviousColumnCell", new myPreviousFocusHandler()); myTableActionMap.put("selectNextColumnCell", new myNextFocusHandler()); public class myPreviousFocusHandler extends AbstractAction { public void actionPerformed(ActionEvent evt) { KeyboardFocusManager myManager = KeyboardFocusManager.getCurrentKeyboardFocusManage r(); myManager.focusPreviousComponent(); } } public class myNextFocusHandler extends AbstractAction { public void actionPerformed(ActionEvent evt) { KeyboardFocusManager myManager = KeyboardFocusManager.getCurrentKeyboardFocusManage r(); myManager.focusNextComponent(); } }
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 16/03/20 15:38
aaa