繁体   English   中英

多个输出问题JRadioButton,默认选择,否则,ActionListener

[英]Multiple Output Issue JRadioButton, default selection, else if, ActionListener

我是Java的新堆栈用户,并且是Java的新手,因此,如果仍然不清楚或使用了错误的术语,请提前道歉。

如果没有对JRadioButton进行选择,我希望分配一个基值。

  • 我可以将JRadioButton设置为true,它将自动选择但不会与侦听器一起出现,因为没有事件?

  • 我可以设置else语句,但是由于它在等待侦听器事件而又没有发生任何事情?

以下代码似乎可以与我一起使用,将值设置为double first。

我的问题是,尽管我为变量$ leadtime分配了正确的值,但系统输出返回其值4次,有人可以解释一下此事件吗?

或者,如果有更好的方法可以做到这一点,那么我会乐于学习,或者两次尝试都忽略了某些东西?

谢谢,weekwarrior84

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);
    }
}

实际上,单击RadioButton只能打印一次结果。 但是最初22.0的四次打印是因为您在构造函数CRADIOHAND编写了这一行。

System.out.println($leadtime);

因此,在CRADIOHAND中对CRADIOHAND构造函数的每次调用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));

CRADIOHAND构造函数中的SOP CRADIOHAND调用4次。 因此解决方案是您注释或删除System.out.println($leadtime); CRADIOHAND构造函数中。

注意:作为旁注。 我想建议您在编写代码时坚持使用Java命名约定。 例如:类名始终以大写字母开头。 变量名总是以小写字母开头。 常量(即Final变量)的所有字母都大写。 还有很多。 看看oracle的官方站点

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM