2016-08-22 6 views
0

Ich habe eine JFrame mit JDesktopPane erstellt, in der ich JInternalFrame rufe. Jetzt möchte ich diesen internen Rahmen schließen, indem ich die Escape-Taste drücke.Wie schließe ich JInternalFrame durch Drücken der Escape-Taste?

Ich versuchte 2-3 Wege, aber keine Ausgabe.

  1. Ich habe das Code unter Verwendung von unten angegeben:

    public static void closeWindow(JInternalFrame ji){ 
        ActionListener close=New ActionListener(){ 
    
        public void actionPerformed(ActionEvent e){ 
         ji.dispose(); 
        } 
    }; 
    

    Wenn ich durch Zufuhr von seiner Aufgabe obigen Verfahren von meiner intern Rahmenklasse Konstruktor aufgerufen, konnte ich es schließen. Aber wenn ich da schreibe, schreibe ich andere Codezeilen an den Konstruktor. Der obige Methodenaufruf funktioniert nicht. Bitte hilf mir. Ich konnte das Problem im Code nicht finden.

  2. Auch ich habe versucht, KeyListener zu internen Rahmen hinzuzufügen, so dass ich mit Tastenanschlägen arbeiten kann, aber es funktioniert auch nicht.
  3. Wieder versuchte ich zu Button setMnemonic wie unten zu entkommen:

    jButton1.setMnemonic(KeyEvent.VK_ESCAPE); 
    

    Aber gibt auch keine Ausgabe.

+1

Ihr 2. Ansatz scheint wie der Weg zu gehen. Möglicherweise haben Sie den KeyListener falsch hinzugefügt. – byxor

+1

Versuche nicht, Screenshots deines Codes zu posten! Einfach den Code selbst posten. Um eine bessere Hilfe zu erhalten, veröffentlichen Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/). –

+0

Dieses Foto Ihres Bildschirms mit Code ist völlig unlesbar. – Jesper

Antwort

0

Sie müssen die KeyListener Schnittstelle implementieren, oder eine hinzufügen, die Anonymous ist. In diesem Beispiel habe ich es einfach implementiert.

import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

import javax.swing.JFrame; 

public class JInternalFrame extends JFrame implements KeyListener { 

    public JInternalFrame() 
    { 
     super(); 


     // other stuff to add to frame 
     this.setSize(400, 400); 
     this.setVisible(true); 

     this.addKeyListener(this); 
    } 

    @Override 
    public void keyTyped(KeyEvent e) { 
     // Don't need to implement this 


    } 

    @Override 
    public void keyPressed(KeyEvent e) { 
     if(e.getKeyCode() == KeyEvent.VK_ESCAPE) { 
      System.exit(0); //Change this to dispose or whatever you want to do with the frame 
     } 

    } 

    @Override 
    public void keyReleased(KeyEvent e) { 
     //Dont need to implement anything here 

    } 

    public static void main(String[] args) 
    { 
     JInternalFrame frame = new JInternalFrame(); 
    } 

} 

Nun, wenn dies ist eine interne JFrame wie erwähnt, ist es wahrscheinlich besser, die keyListener im JDesktopPane umzusetzen und die dispose-Methode auf dem JInternalFrame rief nach Flucht drücken, anstatt keyListener in diesem Rahmen umzusetzen. Es hängt alles davon ab, welche GUI-Komponente den Fokus der Eingabe hat.

+0

Vielen Dank. Diese Lösung funktioniert nur dann für den jinernen Frame, wenn keine Komponenten vorhanden sind. Wenn ich einige Komponenten wie jlabel, jtextfield, jbutton bis jinternframe hinzufüge, funktioniert der Keylistener nicht. Ich denke, dass einige andere Komponenten, die in jinternalframe vorhanden sind, den Fokus erhalten, so dass es nicht in der Lage ist, das keypressed Ereignis für jinnalframe zu erkennen. Können Sie mir bitte helfen, dieses Problem zu lösen? – user6725738

Verwandte Themen