2016-03-30 23 views
1

私のKeylistenerの代わりにJButtonを使用しようとしています。キーリスナーには、解放されたときなどに押された場合などのメソッドがあります。このJButtonで同じことをしようとすると、Exp:ユーザーがマウスでクリックし、マウスをクリックした位置でコードが実行されます。コードは終了します。JButtonを使用する方法「押して離した場合」

私は何を試しましたか?私はJToggleButtonで再生していた完全な "クリック"をJButtonが必要としているので、私が望んだ結果を生成しなかったJButtonを最初から使用しようとしました (JToggButton.getModel()。isPressed())誰かが希望の結果を生み出すために正しい方向に向けることができますか?

具体的な目標:

私は私がマイクに向かって話し終えること準備ができていますまで、マイクと私はクリックを押したままになるというボタンをクリックします、と思う、私は構築されたマイク方式を使用したいですFacebookのどのようにあなたの親指でマイクを押さえていて、それを放すと音声録音が止まるので、2つのメソッドstartLogic()があります。押されて保持され、stopLogic();ユーザーが話し終わったときに最終的に解放されたとき

+0

トグルボタンが必要なようです。あなたが達成しようとしていることをよりよく説明し、コードを投稿してください。 –

+2

[MouseListener](https://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseListener.html)の使用をお試しください。 – DistribuzioneGaussiana

+1

片方向:ChangeListenerをボタンのButtonModelに追加します。 @DistribuzioneGaussiana:スペースバーなどのマウス以外の方法でボタンが押された場合、MouseListenerは機能しないことに注意してください。 –

答えて

6

このリスナーはボタン押下ではなくマウスが押されたときに応答しないため、間違った解決策がMouseListenerを使用することに注意してください。スペースバーのようなマウス以外の任意の手段によって選択することができる。

ボタンのButtonModelをChangeListenerで聴いて、isPressed()状態の変更に応答します。マウスやスペースバーのように、ボタンを押しても機能します。例:

import javax.swing.*; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 

@SuppressWarnings("serial") 
public class ButtonPressTest extends JPanel { 
    private JButton button = new JButton("Button"); 
    private JTextArea textArea = new JTextArea(15, 15); 

    public ButtonPressTest() { 
     button.getModel().addChangeListener(new BtnModelListener()); 
     textArea.setFocusable(false); 
     add(button); 
     add(new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
             JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED)); 
    } 

    private class BtnModelListener implements ChangeListener { 
     private boolean pressed = false; // holds the last pressed state of the button 

     @Override 
     public void stateChanged(ChangeEvent e) { 
      ButtonModel model = (ButtonModel) e.getSource(); 

      // if the current state differs from the previous state 
      if (model.isPressed() != pressed) { 
       String text = "Button pressed: " + model.isPressed() + "\n"; 
       textArea.append(text); 
       pressed = model.isPressed(); 
      } 
     } 
    } 

    private static void createAndShowGui() { 
     JFrame frame = new JFrame("ButtonPressTest"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(new ButtonPressTest()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGui(); 
      } 
     }); 
    } 
} 
+1

素晴らしい観察。ほとんどの人はMouseListenerでそれを行います。 –

+0

私はこれが私のニーズに最も合っていると思います。私はmouslistenerを使用することを考えていたが、それが適切に機能しないことを認識していたので、私は今日何か:) – Sleeking

関連する問題