1

私は新しいスタック ユーザーであり、Java をまったく初めて使用するので、これが不明確であったり、間違った用語が使用されていたりする場合は、事前にお詫びします。

JRadioButton が選択されていない場合は、ベース値を割り当てようとしています。

  • JRadioButton を true に設定できます。これは自動選択されますが、イベントがなかったためリスナーには表示されませんか?

  • Else ステートメントを設定できますが、リスナー イベントを待機しているため、何も起こりませんか?

次のコードは、最初に double に値を設定するとうまくいくようです。

私の質問は、変数 $leadtime に割り当てられた正しい値を取得しても、システム出力がその値を 4 回返すことです。誰かがこのイベントを説明してもらえますか?

または、これを行うためのより良い方法があれば、喜んで学びますか、それとも 2 つの箇条書きの試みで何かを見落としているのでしょうか?

ありがとう、週末戦士84

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JRadioButton;

public class CRADIOHAND implements ActionListener{

JRadioButton $test1;    
JRadioButton $test2;
JRadioButton $test3;
JRadioButton $test4;
double $leadtime = 22;

CRADIOHAND(JRadioButton $buttonJR1,JRadioButton $buttonJR2,JRadioButton $buttonJR3,JRadioButton $buttonJR4){

    $test1 = $buttonJR1;    
    $test2 = $buttonJR2;
    $test3 = $buttonJR3;
    $test4 = $buttonJR4;
    System.out.println($leadtime);
}   
    public void actionPerformed(ActionEvent re1) {          

        if($test1.isSelected()){
        $leadtime= 22;

        }else if($test2.isSelected()){
        $leadtime= 47;

        }else if($test3.isSelected()){
        $leadtime= 113;

        }else if($test4.isSelected()){
        $leadtime= 130;
        }
        System.out.println($leadtime);
}
}

短縮レイアウト。

import java.awt.FlowLayout;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JRadioButton;

public class CLAYOUT extends JFrame {

    private FlowLayout $lay;

    public CLAYOUT(){

        super("Sample Program");
        $lay = new FlowLayout();  
        setLayout($lay);

        JRadioButton $buttonJR1 = new JRadioButton("22 Days");
        add($buttonJR1);        
        JRadioButton $buttonJR2 = new JRadioButton("47 Days");  
        add($buttonJR2);        
        JRadioButton $buttonJR3 = new JRadioButton("113 Days"); 
        add($buttonJR3);            
        JRadioButton $buttonJR4 = new JRadioButton("130 Days"); 
        add($buttonJR4);        

        ButtonGroup radiogroup = new ButtonGroup();
        radiogroup.add($buttonJR1);
        radiogroup.add($buttonJR2);
        radiogroup.add($buttonJR3);
        radiogroup.add($buttonJR4);

        $buttonJR1.addActionListener(new CRADIOHAND($buttonJR1, $buttonJR2, $buttonJR3, $buttonJR4));
        $buttonJR2.addActionListener(new CRADIOHAND($buttonJR1, $buttonJR2, $buttonJR3, $buttonJR4));
        $buttonJR3.addActionListener(new CRADIOHAND($buttonJR1, $buttonJR2, $buttonJR3, $buttonJR4));
        $buttonJR4.addActionListener(new CRADIOHAND($buttonJR1, $buttonJR2, $buttonJR3, $buttonJR4));
    }   
}

短縮メイン

import javax.swing.JFrame;

public class CREORDER{

public static void main  (String[] args){

    CLAYOUT $clay = new CLAYOUT();
    $clay.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    $clay.setSize(1200,500);
    $clay.setVisible(true);
    }
}
4

1 に答える 1

0

RadioButton をクリックすると、実際に結果が 1 回だけ出力されます。しかし、22.0 の最初の 4 回の出力は、コンストラクターに記述したこの行によるものですCRADIOHAND

System.out.println($leadtime);

CRADIOHANDこのため、 in atのコンストラクターへの呼び出しごとCLAYLAYOUTに:

        $buttonJR1.addActionListener(new CRADIOHAND($buttonJR1, $buttonJR2, $buttonJR3, $buttonJR4));
        $buttonJR2.addActionListener(new CRADIOHAND($buttonJR1, $buttonJR2, $buttonJR3, $buttonJR4));
        $buttonJR3.addActionListener(new CRADIOHAND($buttonJR1, $buttonJR2, $buttonJR3, $buttonJR4));
        $buttonJR4.addActionListener(new CRADIOHAND($buttonJR1, $buttonJR2, $buttonJR3, $buttonJR4));

SOPwithin コンストラクターはCRADIOHAND、行で 4 回呼び出しています。したがって、解決策System.out.println($leadtime);は、コンストラクターでコメントまたは削除することですCRADIOHAND

注: 補足として。コードを書くときは、Java の命名規則に従うことをお勧めします。例: クラス名は常に大文字で始まります。変数名は常に小文字で始まります。また、定数 (つまり、Final 変数) は、すべての文字が大文字になっています。他にもたくさんあります。オラクルの公式サイトを見てみましょう。

于 2013-03-16T11:23:46.710 に答える