2016-08-22 3 views
0

JDesktopPaneで作成しました。その中でJInternalFrameと呼んでいます。今度はエスケープキーを押してその内部フレームを閉じたいと思う。エスケープキーを押してJInternalFrameを閉じる方法は?

私は2つの方法で試しましたが、出力はありませんでした。私は

  1. 下記コード使用していることを私がそのオブジェクトを供給することにより、私のインターンフレームクラスコンストラクタから上記の方法と呼ばれる場合

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

    を、私はそれを閉じることができました。しかし、そこに私はコンストラクタにいくつかの他のコード行を書く。上記のメソッド呼び出しは機能しません。私を助けてください。コード内で問題を見つけることができませんでした。

  2. また、KeyListenerを内部フレームに追加しようとしたので、キーストロークで作業することもできましたが、動作しません。
  3. は再び私はエスケープとして以下のようにボタンにsetMnemonicに試してみました:

    jButton1.setMnemonic(KeyEvent.VK_ESCAPE); 
    

    しかし、また、何も出力を与えません。

+1

あなたの2番目のアプローチは、行く方法のようです。 KeyListenerが正しく追加されていない可能性があります。 – byxor

+1

コードのスクリーンショットを投稿しないでください!コード自体を投稿するだけです。もっと早く助けを求めるには、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 –

+0

コード付きのあなたのスクリーンの写真は全く読めません。 – Jesper

答えて

0

あなたは、KeyListenerインタフェースを実装して、または匿名である1を追加する必要があります。この例では、実装しました。

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(); 
    } 

} 

さて、これは前述のように内部JFrameのであれば、JDesktopPaneの中のKeyListenerを実装し、このフレーム内のKeyListenerをエスケープを押す代わりに、実装後のJInternalFrameのDisposeメソッドを呼び出すことはおそらく良いです。それはどのGUIコンポーネントが入力の焦点を持っているかによって異なります。

+0

ありがとうございます。このソリューションは、コンポーネントが存在しない場合にのみjinternalframeでうまく動作します。 jlabel、jtextfield、jbuttonなどのいくつかのコンポーネントをjinternalframeに追加すると、キーリストが機能しません。私は、jinternalframeに存在する他のいくつかのコンポーネントがフォーカスを取得するので、jinternalframeのkeypressedイベントを検出できないと思います。この問題を解決するために私を助けてもらえますか? – user6725738

関連する問題