2016-05-16 1 views
0

サンプルコードは、JButton設定のほとんどを試しましたが、それを把握できませんでした。ニーモニックを使用してJButtonが押されたアニメーションを呼び出す

import java.awt.event.*; 

import javax.swing.*; 

public class FailedMnemonic extends JFrame implements Runnable{ 

    /* 
    * 
    * F4 to call button action 
    * ESC to dispose Dialog 
    * 
    * */ 

    public FailedMnemonic() { 
     setSize(200, 100); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     setLayout(null); 
     Panel p = new Panel(this); 
     p.setBounds(0, 0, 200, 60); 
     add(p); 
    }; 

    public static void main(String args[]){ 
     FailedMnemonic f = new FailedMnemonic(); 
     f.setVisible(true); 
    } 

    @Override 
    public void run() { 

    } 

    public class Panel extends JPanel{ 

     final JFrame f; 
     Action a = new AbstractAction() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       /*Here should be called the pressed animation from the button, dont know how 
       * maybe i should add the button as parameter on the dialog class so when is dispose the button returns to its original state*/ 
       Dialog d = new Dialog(f, "...", true); 
       d.setSize(500, 200); 
       d.setVisible(true); 
      } 
     }; 

     JButton b = new JButton(); 

     public Panel(JFrame f){ 
      this.f = f; 
      setLayout(null); 
      b.setBounds(0, 0, 150, 50); 
      b.setAction(a); 
      a.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_F4); 
      getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
        KeyStroke.getKeyStroke(KeyEvent.VK_F4, 0), "meh"); 
      getActionMap().put("meh", a); 
      b.setText("CLICK ME"); 
      add(b); 
     } 

     public class Dialog extends JDialog{ 

      public Dialog(JFrame OWNER, String title, boolean modal){ 
       super(OWNER, title, modal); 
       setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
       addEscapeListener(this); 
      } 

      public void addEscapeListener(final JDialog dialog) { 
       ActionListener escListener = new ActionListener() { 
        @Override 
        public void actionPerformed(ActionEvent e) { 
         dialog.setVisible(false); 
        }}; 
       dialog.getRootPane().registerKeyboardAction(escListener, 
         KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), 
         JComponent.WHEN_IN_FOCUSED_WINDOW); 

      } 

     } 

    } 

} 

輸入はdidn'tあなたのクラスの「フレーム」と「ダイアログ」を呼び出さないブロックコード

+0

「インポートはブロックコードに入りませんでした」 - すべてのコードは4つのスペースをインデントする必要があります。これを行う最も簡単な方法は、コードを選択してから、 '{}'ボタンをクリックすることです。 – camickr

答えて

2

に入ります。その名前のAWTコンポーネントがあるので混乱します。より多くの説明名を使用します(クイックデモコードの場合でも)。

コールのJButtonは、ニーモニックでのAlt + F4を、使用しているとき、私はアニメーションを取得するWindowsでは、ニーモニック

を使用してアニメーションを押しました。キーバインディングであるF4を使用すると、アニメーションが表示されません。

これはKey Bindingsを使用するとKeyStrokeActionにマップするだけで意味があります。アクションがボタンに属しているかどうかはわかりません。

ボタンのアニメーションを見たいなら、私はあなたがする必要があることをお勧め:

  1. あなたのダイアログを表示するには、ボタンに通常のActionListenerを追加します。キーバインディングのためのアクションを作成します。このアクションは、button.doClick()を呼び出します。

さらに詳しいアクションについては、Escape Key and Dialogを参照してください。このアクションは、エスケープキーを使用してコンボボックスのドロップダウンを閉じることをサポートします。

+0

私はあなたの提案を試みました。実際に動作し、アニメーションがトリガされ、ダイアログはアクションがトリガされたときに問題が発生し、再びダイアログが表示されます。 –

+0

'ダイアログが削除されたときにアクションが再びトリガされ、ダイアログが再び表示されます。 ' - それで、別のActionLIstenerとActionが必要だと言った理由です。あなたは正しく提案を実装していないし、あなたのコードを再投稿しなかったので、私はさらに助けません。 – camickr

関連する問題