添加多个按钮组的更有效方法

时间:2019-01-03 18:36:59

标签: java swing jpanel jradiobutton buttongroup

我正在尝试使用swing库在Java中进行个性测验。有5个问题,每个问题都有3个可能的答案。现在,我正在构建界面,但正在努力将多组按钮添加到我的createComponents方法中。

因此,为了清楚起见,并且更易于阅读,我为我的第一个问题文本使用了单独的方法。那已经没有问题了。但是我在按钮组方面遇到了问题。我不想用多行和多行重复添加Buttongroups的东西加载我的createComponents方法,因为我读到不包括注释,方法的最大长度应为15行。或至少对于初学者来说。

因此,我为按钮组创建了一个单独的方法,然后尝试将其添加到createComponents方法中。这给了我一个错误,说没有合适的方法可以将按钮组添加到我的容器中。

现在,我正在createComponent方法中编写多行代码,以便可以“正确”添加单选按钮。我只是第一个问题,我的方法中已经有16行。有更好,更有效的方法吧?

private void createComponents(Container container){

    BoxLayout layout = new BoxLayout(container, BoxLayout.Y_AXIS);
    container.setLayout(layout);

    JLabel text = new JLabel("this is the intro text");
    container.add((text), BorderLayout.NORTH);

    container.add(QuizIntro());
    container.add(QuestionOne());
    container.add(QuestionOneGroup());
// this throws an error

    JRadioButton int1 = new JRadioButton("This is answer choice 1");
    JRadioButton ent1 = new JRadioButton("This is answer choice 2");
    JRadioButton jb1 = new JRadioButton("This is answer choice 3");
    ButtonGroup group = new ButtonGroup();
    group.add(int1);
    group.add(ent1);
    group.add(jb1);
    container.add(int1);
    container.add(ent1);
    container.add(jb1);
// this is the 'correct' way I've been doing it. 
}

public ButtonGroup QuestionOneGroup(){

    JRadioButton int1 = new JRadioButton("This is answer choice 1");
    JRadioButton ent1 = new JRadioButton("This is answer choice 2");
    JRadioButton jb1 = new JRadioButton("This is answer choice 3");
    ButtonGroup group = new ButtonGroup();
    group.add(int1);
    group.add(ent1);
    group.add(jb1);
    return group;
// this is the method I made to add a buttongroup and make my createComponent easier to read. 
}

所以我的期望输出只是一个带有问题和3种可能答案选择的准系统窗口,但是我收到一条错误消息,告诉我没有合适的方法。它说“参数不匹配按钮组不能转换为弹出菜单或组件”。

1 个答案:

答案 0 :(得分:1)

您只能将Components添加到Container

ButtonGroup不是Component

ButtonGroup用于指示已选择一组组件中的哪个组件。您仍然需要将每个单选按钮添加到面板中。

您的代码应类似于:

//public ButtonGroup QuestionOneGroup()
public JPanel questionOneGroup()
{
    JRadioButton int1 = new JRadioButton("This is answer choice 1");
    JRadioButton ent1 = new JRadioButton("This is answer choice 2");
    JRadioButton jb1 = new JRadioButton("This is answer choice 3");
    ButtonGroup group = new ButtonGroup();
    group.add(int1);
    group.add(ent1);
    group.add(jb1);
    //return group;

    JPanel panel = new JPanel();
    panel.add( int1 );
    panel.add( ent1 );
    panel.add( jb1 );
    return panel;
}

阅读How to Use Radio Buttons的Swing教程中的部分,以获取更多信息和工作示例。