Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在CardLayout面板中意外切换JRadioButton_Java_Swing_Cardlayout_Jradiobutton - Fatal编程技术网

Java 在CardLayout面板中意外切换JRadioButton

Java 在CardLayout面板中意外切换JRadioButton,java,swing,cardlayout,jradiobutton,Java,Swing,Cardlayout,Jradiobutton,所以问题是:我正在尝试制作一个类似于向导的CardLayout。在每个卡片面板中,我放回&next JButton和3个JRadioButton以在3个页面之间切换 现在,当我第一次选择单选按钮时,它工作正常。但是,当我第二次选择单选按钮时,它们并没有按预期被选中。例如,我想选择第2页,卡面板2会显示,但单选按钮2的状态不会显示它正在被选中,而是单选按钮1或3会被选中。按钮2仅在我再次单击时被选中。当我尝试选择其他人时也会发生同样的事情 import java.awt.*; import jav

所以问题是:我正在尝试制作一个类似于向导的CardLayout。在每个卡片面板中,我放回&next JButton和3个JRadioButton以在3个页面之间切换

现在,当我第一次选择单选按钮时,它工作正常。但是,当我第二次选择单选按钮时,它们并没有按预期被选中。例如,我想选择第2页,卡面板2会显示,但单选按钮2的状态不会显示它正在被选中,而是单选按钮1或3会被选中。按钮2仅在我再次单击时被选中。当我尝试选择其他人时也会发生同样的事情

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CardLayoutWizardDemo extends JFrame{
    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                CardLayoutWizardDemo frame= new CardLayoutWizardDemo();
                frame.init();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }

    private static final long serialVersionUID = 1L;

    private JPanel cardPanel, panel1, panel2, panel3, btnPanel1, btnPanel2, btnPanel3;
    private JLabel label1, label2, label3;
    private JRadioButton step1, step2, step3;
    private ButtonGroup bg;
    private CardLayout cl = new CardLayout();

    private void init(){
        setTitle("CardLayoutWizardDemo");
        cardPanel = new JPanel();
        cardPanel.setLayout(cl);

        panel1 = new JPanel(new BorderLayout());
        panel2 = new JPanel(new BorderLayout());
        panel3 = new JPanel(new BorderLayout());

        label1 = new JLabel("label 1");
        label2 = new JLabel("label 2");
        label3 = new JLabel("label 3");

        panel1.add(label1, BorderLayout.NORTH);
        panel2.add(label2, BorderLayout.NORTH);
        panel3.add(label3, BorderLayout.NORTH);

        btnPanel1 = new JPanel();
        btnPanel2 = new JPanel();
        btnPanel3 = new JPanel();

        btnPanel1.setName("panel1");
        btnPanel2.setName("panel2");
        btnPanel3.setName("panel3");

        btnPanel1 = initTutBtn(btnPanel1);
        btnPanel2 = initTutBtn(btnPanel2);
        btnPanel3 = initTutBtn(btnPanel3);

        panel1.add(btnPanel1, BorderLayout.SOUTH);
        panel2.add(btnPanel2, BorderLayout.SOUTH);
        panel3.add(btnPanel3, BorderLayout.SOUTH);

        cardPanel.add(panel1, "1");
        cardPanel.add(panel2,"2");
        cardPanel.add(panel3,"3");

        getContentPane().add(cardPanel, BorderLayout.CENTER);

        setPreferredSize(new Dimension(350,500));
        setMinimumSize(new Dimension(240,320));
        pack();
        setLocationByPlatform(true);
    }


    /**create new set of 3 step buttons
     */
    private JPanel initTutBtn(JPanel btnPanel){

        btnPanel.setLayout(new BoxLayout(btnPanel,BoxLayout.X_AXIS));

        step1 = new JRadioButton();
        step2 = new JRadioButton();
        step3 = new JRadioButton();

        step1.setActionCommand("step1");
        step2.setActionCommand("step2");
        step3.setActionCommand("step3");

        bg = new ButtonGroup();
        bg.add(step1);
        bg.add(step2);
        bg.add(step3);

        if (btnPanel.getName().equals("panel1")){
            step1.setSelected(true);
        }else if (btnPanel.getName().equals("panel2")){
            step2.setSelected(true);
        }else if (btnPanel.getName().equals("panel3")){
            step3.setSelected(true);
        }

        step1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                goToStep(e);
            }
        });
        step2.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                goToStep(e);
            }
        });
        step3.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                goToStep(e);
            }
        });
        btnPanel.add(step1);
        btnPanel.add(step2);
        btnPanel.add(step3);

        return btnPanel;
    }

    private void goToStep(ActionEvent evt){
        if(evt.getActionCommand().equals("step1")){
            cl.show(cardPanel, "1");
        }else if(evt.getActionCommand().equals("step2")){
            cl.show(cardPanel, "2");
        }else if(evt.getActionCommand().equals("step3")){
            cl.show(cardPanel, "3");
        }
    }
}

我想问题可能在于我在
initButton()
goToStep(ActionEvent evt)
中创建了新的单选按钮,但我不知道我做错了什么

请创建并发布一个有效的or。谢谢@HovercraftFullOfEels我添加了一个SSCE。请再次检查。您正在分别三次初始化JRadioButton字段。您总共创建了九个JRadioButton。@VGR但是如果我没有,JRadioButton不会显示在卡面板上。我尝试只初始化3个JRadioButton一次,然后将它们添加到3个新的JPanel buttonPanel中。也没有出现。对的将JRadioButtons放在CardLayout外部的单独面板中。当然,您可以放弃使用CardLayout和单选按钮,而是使用设置为JTabbedPane.BOTTOM的JTabbedPane,这意味着您的工作量要少得多。