17. februar 2004 - 15:50Der er
3 kommentarer og 1 løsning
Tildele Action til KeyStroke i JDialog fejler
Hejsa eksperter, jeg fandt følgende kode på java.sun.com's forums (for at kunne binde Actions KeyStrokes i JFrames), men jeg synes ikke at kunne få det til at fungere i JDialog (og så er det ligemeget om jeg gør den modal, eller ej)....
Her er koden, kan i fortælle mig hvorfor jeg ikke få "skudt" en ActionEvent (dejlig fordanskning), når jeg trykker på escape? (Jeg har testet med Console-test, og actionPerformed bliver aldrig kaldt)
// Handle escape key to close the dialog KeyStroke escapeKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false); Action escapeKeyAction = new AbstractAction() { public void actionPerformed(ActionEvent e) { System.out.println("Been in action"); dispose(); } }; getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeKeyStroke, "ESCAPE"); getRootPane().getActionMap().put("ESCAPE", escapeKeyAction);
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Det virker så snart du tilføjer komponenter (hvorfor? hmm, vender måske tilbage med et svar..):
class Ex { public static void main(String[] args) { final javax.swing.JDialog dia = new javax.swing.JDialog(); javax.swing.KeyStroke escapeKeyStroke = javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ESCAPE,0,false); javax.swing.Action escapeKeyAction = new javax.swing.AbstractAction() { public void actionPerformed(java.awt.event.ActionEvent e) { System.out.println("Been in action"); dia.dispose(); System.exit(0); } }; dia.getRootPane().getInputMap( javax.swing.JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeKeyStroke, "ESCAPE"); dia.getRootPane().getActionMap().put("ESCAPE", escapeKeyAction); dia.getContentPane().add( new javax.swing.JButton() ); // hokus pokus dia.show(); } }
Synes godt om
Slettet bruger
17. februar 2004 - 16:55#2
hrmmmmm..... ?!?!
YEP, det passer... så snart man har tilføjet en komponent, så virker skidtet :-?
Ligemeget om du finder et svar eller ej (altså på HVORFOR den har en sådan opførelse), så må du godt selv smide et svar - du løste i hvert fald problemet for mig ;-)
Det har måske et eller andet at gøre med at rootpane ikke er aktivt, hvis der ikke er nogen komponenter på? Hvad ved jeg, men pointene - dem snupper jeg sgu ;-)
Synes godt om
Slettet bruger
17. februar 2004 - 16:59#4
Jamen, så takker jeg for hjælpen... takker :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.