Более эффективный способ добавления нескольких групп кнопок - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь сделать личный тест в Java, используя библиотеку свинга.Есть 5 вопросов, на каждый из которых есть 3 возможных ответа.Сейчас я создаю интерфейс, но я пытаюсь добавить несколько групп кнопок в мой метод createComponents.

Итак, для ясности и облегчения чтения я сделал отдельный метод для моего первого текста вопроса.Это было добавлено без проблем.Но я сталкиваюсь с проблемами с группами кнопок.Я не хотел загружать свой метод createComponents несколькими строками и строками, а также повторяющимися строками для добавления элементов Buttongroups, потому что я читал, что, за исключением комментариев, методы должны иметь длину не более 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. 
}

Таким образом, мой ожидаемый результат - просто скелет с вопросом и тремя возможными вариантами ответа, но я получаю сообщение об ошибке, сообщающее, что нет подходящего метода.в нем говорится "несоответствие аргументов, но группу нельзя преобразовать во всплывающее меню или компонент".

1 Ответ

0 голосов
/ 03 января 2019

Вы можете добавить Components только к Container.

A ButtonGroup НЕ Component.

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

Прочтите раздел из учебника по Swing на Как использовать радиокнопки для получения дополнительной информации и рабочих примеров.

...