@FR34

Функция не вызывает необходимое наполнение для интерфейса на основе int переменной, что ей надобно?

Итак, уважаемые обитатели сего ресурса, пишу элементарный IQ тест, но уже второй раз натыкаюсь на проблемы, полное описание этой выглядит как-то так. Есть два класса, интерфейс и класс с вопросами к тесту, интерфейс работает исправно. В классе с вопросами есть несколько функций, функции с наполнением (текст вопроса, изображения), функция вызывающая тот или иной вопрос в зависимости от переменной int qx; и две функции которые отвечают за переход между вопросами, они меняют значение той самой переменной и следом перевыхывают функцию выбора вопроса, дабы изменить наполнение интерфейса. Функции работают исправно, переменная qx исправно меняется что подтверждает System.out.println("nextQ"+qx); и подобные ей, функции смены вопроса вызывают повторно функцию public void chooseQuest(); но, наполнение интерфейса не желает меняться, хотя функция с необходимым наполнением вызвана, подскажите что не так.
Вопросы:
public class Question {  
    
    public String question;
    public String img;
    public boolean obrazek;
    public boolean tlacitka;
    public boolean textBox;
    private int qx = 1;
    
    public void nextQuestion(){
        if(qx >= 1 & qx < 40){
            qx = qx + 1;
        }else if(qx == 40){
            qx = 1;
        }
        System.out.println("nextQ"+qx);
        chooseQuest();
    }
    
    public void prevQuestion(){
        if(qx <= 40 & qx > 1){
            qx = qx - 1;
        }else if(qx == 1){
            qx = 40;
        }
        System.out.println("prevQ"+qx);
        chooseQuest();
    }
    
/**
 *      Funkce ktera vyvolava zvolenou otazku
 */        
    public void chooseQuest(){
        if(qx == 1){
            Q1();
        }else if(qx == 2){
            Q2();
        }
        System.out.println("chQ"+qx);
    }
    
/**
 *      Funkce ktera obsahuje prvky otazky 1(jedna)
 */            
    public void Q1(){
        question = "Tady bude otazka1";
        img = "img\\TASK1.png";
        obrazek = true;
        tlacitka = true;
        textBox = false;
        qx = 1;
        System.out.println("Otazka 1");
    }
    
    public void Q2(){
        question = "Tady bude otazka2";
        img = "img\\TASK9.png";
        obrazek = true;
        tlacitka = true;
        textBox = false;
        qx = 2;
        System.out.println("Otazka 2");
    }
}

Интерфейс:
public UserInterface(){
          
            setBounds(100,35,500,680);
            setResizable(false);
            setTitle("IQ test");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
            panel.setLayout(null);
            
            quest = new Question();

            JButton prevQ = new JButton("<<<");
            prevQ.setBounds(120, 615, 60, 20);
            prevQ.addActionListener(new pQuestButtonEvent());
            panel.add(prevQ);

            JButton nextQ = new JButton(">>>");
            nextQ.setBounds(320, 615, 60, 20);
            nextQ.addActionListener(new nQuestButtonEvent());
            panel.add(nextQ);

            JButton chButton = new JButton("Check Answer");
            chButton.setBounds(190, 610, 120, 30);
            chButton.addActionListener(new chButtonEvent());
            panel.add(chButton);
            
            quest.chooseQuest();

            JTextField input = new JTextField("Answer here...");
            input.setBounds(300, 550, 140, 20);
            input.setVisible(quest.textBox);
            panel.add(input);

            JLabel questionT = new JLabel(quest.question);
            questionT.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(102, 102, 102), 1, true));
            questionT.setBounds(10, 10, 470, 70);
            panel.add(questionT);

            ButtonGroup group = new ButtonGroup();

            JRadioButton radio1 = new JRadioButton("Select 1");
            JRadioButton radio2 = new JRadioButton("Select 2");
            JRadioButton radio3 = new JRadioButton("Select 3");
            JRadioButton radio4 = new JRadioButton("Select 4");
            JRadioButton radio5 = new JRadioButton("Select 5");
            JRadioButton radio6 = new JRadioButton("Select 6");
            group.add(radio1);
            group.add(radio2);
            group.add(radio3);
            group.add(radio4);
            group.add(radio5);
            group.add(radio6);
            
            radioPanel = new JPanel(new GridLayout(0, 2));
            radioPanel.add(radio1);
            radioPanel.add(radio2);
            radioPanel.add(radio3);
            radioPanel.add(radio4);
            radioPanel.add(radio5);
            radioPanel.add(radio6);
            radioPanel.setBounds(250, 80, 230, 450);
            radioPanel.setVisible(quest.tlacitka);
            panel.add(radioPanel);
            
            img = new JLabel();
            img.setBounds(10, 80, 230, 520);
            img.setIcon(new javax.swing.ImageIcon(quest.img));
            img.setVisible(quest.obrazek);
            panel.add(img);

            getContentPane().add(panel);
     
        }
        
        class nQuestButtonEvent implements ActionListener{
            public void actionPerformed(ActionEvent e){
                quest.nextQuestion();
            }
        }
        
        class pQuestButtonEvent implements ActionListener{
            public void actionPerformed(ActionEvent e){
                quest.prevQuestion();
            }
        }
}
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
Ewintory
@Ewintory
Java / Android developer
Привет. От того что ты меняешь переменные, сам интерфейс автоматом не изменится. Нужно самому заново проставлять значения при каждом обновлении. Например после изменения quest.question нужно вызвать questionT.setText(quest.question). Советую завести метод, который принимает Question и проставляет его данные в элементы интерфейса.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы