web-dev-qa-db-ja.com

JButtonが押されたことをどのように確認できますか? isEnabled()が機能しない場合は?

JButtonが押されたことをどのように確認できますか?名前が「isEnabled」であるメソッドがあることを知っています

だから私はテストするコードを書いてみます。

  1. このコードには、「追加」ボタンと「チェックアウト」ボタンの2つのJbuttonがあります。
  2. 「追加」ボタンを押した後に「チェックアウト」ボタンを押すと、コードに「追加ボタンが押されました」というメッセージが表示されますが、「チェックアウト」ボタンを押す前に「追加」ボタンを押さないと、コードに「追加ボタンが押されていません」というメッセージ。

ここにコード:

final JButton btnAdd = new JButton("Add");
btnAdd.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
    }
});
panel.add(btnAdd);
JButton btnConfirm = new JButton("Check Out");
btnConfirm.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        if (btnAdd.isEnabled()) {
            System.out.println("Add Button is pressed");
        }
        if (!btnAdd.isEnabled()) {
            System.out.println("Add Button is not pressed");
        }
    }
});

このコードを実行すると、「追加」ボタンを押さなかったのに、「追加ボタンが押された」だけのコードが表示されます。なぜそれがそのように起こるのですか?

5
Dexter Moregan

JButtonには model があり、これらの質問に答えます:

  • isArmed()
  • isPressed()
  • isRollOVer()

など。したがって、モデルに求めている答えを尋ねることができます。

     if(jButton1.getModel().isPressed())
        System.out.println("the button is pressed");
15
Sage

使用する必要があるようです JToggleButton

JToggleButton tb = new JToggleButton("Push me");
tb.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        JToggleButton btn =  (JToggleButton) e.getSource();
        btn.setText(btn.isSelected() ? "pushed" : "Push me");
    }
});
3
alex2410

JButton#isEnabledは、コンポーネントのユーザーインタラクティビティ、つまりユーザーがコンポーネントを操作(押す)できるかどうかを変更します。

JButtonが押されると、actionPerformedイベントが発生します。

追加ボタンが有効になっているため、確認ボタンを押すとAdd button is pressedが表示されます。述べたように、それはボタンの押されたスタートとは何の関係もありません。

あなたのコードに基づいて、確認ボタンのActionListener内で追加ボタンの「押された」開始を確認しようとした場合、ボタンは押された状態にあるため、追加ボタンのActionListenersが呼び出されています。

このすべての情報に基づき、JCheckBoxの使用を検討することをお勧めします。これをJCheckBox#isSelectedを使用して、チェックされているかどうかを判断できます。

詳細については ボタンの使用方法 を詳しく見てください

2
MadProgrammer

System.out.println(e.getActionCommand());関数内でactionPerformed(ActionEvent e)を実行するだけです。これにより、実行されたコマンドがわかります。

または

if(e.getActionCommand().equals("Add")){

   System.out.println("Add button pressed");
}
1
AJ.

使用しようとしているメソッドは、ボタンがアクティブかどうかをチェックします。

btnAdd.isEnabled()

有効にすると、このオブジェクトに関連付けられているすべてのコンポーネントがアクティブになり、このオブジェクトのactionPerformedメソッドを起動できます。

このメソッドは、ボタンが押されたかどうかをチェックしません。

質問を正しく理解できたら、ユーザーが[チェックアウト]をクリックした後、[追加]ボタンを無効にする必要があります。

開始時にボタンを無効にしてみてください:btnAdd.setEnabled(false)またはユーザーが「チェックアウト」を押した後

0
nillas