0

このコードを書きましたが、何らかの理由でコードが期待どおりに機能しません。うまくいくようですが、「isBasic」ブール値の値は実際には変更されておらず、常にfalseになっていると思います。誰が何が悪いのか教えてもらえますか?

    @Override
    public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("basic")){
        isBasic = true;
    }

    if (isBasic && e.getActionCommand().equals("basic")){
        isBasic = false;
    }

    if (isBasic){
        System.out.println("It works!!");
    }
}

JButton のコードは次のとおりです。

    JButton basicTower = new JButton("Basic Tower");
    JButton test = new JButton("Test");
    public boolean isBasic = false;

    public TurretPanel(JPanel panel,BorderLayout layout){

    setLayout(layout);
    panel.add(basicTower,BorderLayout.WEST);
    add(panel);


    basicTower.setActionCommand("basic");
    basicTower.addActionListener(this);
}
4

3 に答える 3

3

次の 2 つの if ステートメントは、互いに否定します。

if (e.getActionCommand().equals("basic")){
    isBasic = true;
}

if (isBasic && e.getActionCommand().equals("basic")){
    isBasic = false;
}

コマンドが「基本」に等しい場合、両方が実行されます。最初のコマンドはそれを true に設定し、2 番目のコマンドはそれを false に戻します。if/else を使用します。

if (e.getActionCommand().equals("basic"))
{
    isBasic = !isBasic;
}
于 2013-06-04T01:13:24.597 に答える
2

if-elseステートメントを使用する必要があるため、問題が発生していると思います...

これについて考えてみましょう...e.getActionCommand()に設定されているとしましょう"basic"

if (e.getActionCommand().equals("basic")){
    isBasic = true;
}

// isBasic is not true...

// This will now equate to true as well...
if (isBasic && e.getActionCommand().equals("basic")){
    isBasic = false;
}

// Meaning isBasic will ALWAYS be false (so long as e.getActionCommand()
// is "basic"
if (isBasic){
    System.out.println("It works!!");
}

もっと似たものを使ってみてください...

if (isBasic && e.getActionCommand().equals("basic")){
    isBasic = false;
} else if (e.getActionCommand().equals("basic")){
    isBasic = true;
}

その代わり。

要件を満たすために順序を変更する必要があるかもしれませんが、私にとっては、これはより理にかなっています...

を使用する方が簡単かもしれませんJToggleButton

更新しました

実際にやった方が簡単かもしれません...

if (isBasic && e.getActionCommand().equals("basic")){
    isBasic = !isBasic;
}
于 2013-06-04T01:13:41.790 に答える