Avatar billede Slettet bruger
17. februar 2004 - 15:50 Der 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);

Håber i kan hjælpe mig ;-)
Avatar billede ulrikm Nybegynder
17. februar 2004 - 16:48 #1
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();
  }
}
Avatar billede 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 ;-)
Avatar billede ulrikm Nybegynder
17. februar 2004 - 16:58 #3
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 ;-)
Avatar billede Slettet bruger
17. februar 2004 - 16:59 #4
Jamen, så takker jeg for hjælpen... takker :-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester