使用java的cardlayout时,使用不同的元素前进到下一个卡对象

时间:2014-06-10 15:07:45

标签: java swing applet layout-manager cardlayout

我是这个网站的新手和新手程序员,所以我希望有人可以帮我解决我面临的问题。我正在制作一个简单的程序,使用卡片布局来选择/输入几个用户特定的选项,这些选项将存储在字符串变量中,然后在最后一个问题之后,用于给出唯一的答案。现在,程序成功提前滑动并显示正确的问题,但是它不会从第一张卡中清除JRadioButton并在程序持续时间内继续使用此单选按钮而不是所需的组件。例如,第二张和第三张卡应该有JTextField,而第四张卡应该有一个JComboBox。我有两个主要的类文件,一个是实际的框架,另一个是显示在幕后的工作。为了将来参考,我计划在它正常工作后将其修改为applet,因此任何建议都会很好。非常感谢任何帮助,谢谢。

我认为问题可能源于此处创建多个卡片对象,ScreenPanel对象各自采用相同的参数,但根据不同的卡片,需要生成不同的组件。

        // set up questions
        String question1 = "Sex: ";
        String[] responses1 = {"Female", "Male"};
        ask[0] = new ScreenPanel(question1, responses1);
        String question2 = "Height in inches: ";
        String[] responses2 = new String[1];
        ask[1] = new ScreenPanel(question2, responses2);
        String question3 = "Weight in pounds: ";
        String[] responses3 = new String[1];
        ask[2] = new ScreenPanel(question3, responses3);
        String question4 = "Event: ";
        String[] responses4 = {"Shot Put", "Discus Throw", "Long Jump", "Triple Jump", "High Jump", "Pole Vault", "4 x 800 Relay", "100 Meter Hurdles", "100 Meter Dash", "4 x 200 Relay",
                "1600 Meter Run", "4 x 100 Relay", "400 Meter Dash", "300 Meter Hurdles", "800 Meter Run", "200 Meter Dash", "3200 Meter Run", "4 x 400 Relay"};
        ask[3] = new ScreenPanel(question4, responses4);
        String question5 = "Distance(inches) or Time(seconds)";
        ask[4] = new ScreenPanel(question5, new String[1]);
        ask[4].setFinalQuestion(true);
        addListeners();
    }

这里的Screen Panel类创建了每张卡,可能是条件问题但不确定。

class ScreenPanel extends JPanel{
    JLabel question;
    JRadioButton[] response1;
    JTextField response2;
    JTextField response3;
    JComboBox response4;
    JTextField response5;
    JButton nextButton = new JButton("Next");
    JButton finalButton = new JButton("Finish");
    String textResponse1, textResponse2, textResponse3, textResponse4, textResponse5;

    ScreenPanel(String ques, String[] resp){
        super();
        setSize(320, 260);
        question = new JLabel(ques);
        JPanel sub1 = new JPanel();
        JPanel sub2 = new JPanel();
        sub1.add(question);
        if (TrackAndField.currentScreen == 0){
            response1 = new JRadioButton[resp.length];
            ButtonGroup group = new ButtonGroup();
            for (int i = 0; i < resp.length; i++){
                response1[i] = new JRadioButton(resp[i], false);
                group.add(response1[i]);
                sub2.add(response1[i]);
            }
//            textResponse1 = group.getSelection().toString();
        }
        if (TrackAndField.currentScreen == 1){
            sub2.remove(response1[0]);
            sub2.remove(response1[1]);
            response2 = new JTextField(4);
            KeyAdapter monitor = new KeyAdapter() {
                public void keyTyped(KeyEvent event){
                    textResponse2 = response2.getText();
                }
            };
            sub2.add(response2);
        }

        if (TrackAndField.currentScreen == 2){
            sub2.remove(response2);
            response3 = new JTextField(10);
            KeyAdapter monitor = new KeyAdapter() {
                public void keyTyped(KeyEvent event){
                    textResponse3 = response3.getText();
                }
            };
            sub2.add(response3);
        }

        if (TrackAndField.currentScreen == 3){
            sub2.remove(response3);
            response4 = new JComboBox(resp);
            sub2.add(response4);
            textResponse4 = response4.getSelectedItem().toString();
        }

1 个答案:

答案 0 :(得分:0)

通过添加额外的字符串参数作为组件的ID来解决,并将其用于条件而不是currentScreen