我的程序是GUI。我有单击按钮的方法。它使用JRadioButtons动态填充下一个屏幕。

private void setExamButtonActionPerformed(java.awt.event.ActionEvent evt)
 {
        if(evt.getActionCommand().equals("Set Exam"))
        {
            CardLayout cL = (CardLayout)cardPanels.getLayout();
            cL.show(cardPanels, "setExamPanel");
        }

        try
        {
            //InputStream code

            String theMessage = myObject.getMessage();

            String delims = "(?=(0*([0-9]{1,2}|100)))";
            String[] questions = theMessage.split(delims);

            System.out.println(Arrays.toString(questions));

            for (int j = 1; j < questions.length; j++)
            {
                settingQuestionBoxes = new JCheckBox(questions[j]);

                settingQuestionTextField = new JTextField("");

                jPanel1.add(settingQuestionBoxes);
                jPanel1.add(settingQuestionTextField);
                jPanel1.revalidate();
                jPanel1.repaint();

            }

            //close streams and socket code

        }
        catch(Exception e)
        {
            System.out.println(e);
        }
 }


然后,我从另一个屏幕获得了另一种方法,从先前方法填充的数据将转到该屏幕。

private void setExamQuestionButtonActionPerformed(java.awt.event.ActionEvent evt)
    {
            if(evt.getActionCommand().equals("Set Exam Question"))
            {
                        ArrayList<JToggleButton> settingQuestionBoxes = new ArrayList<JToggleButton>();

                        for(JToggleButton questions: settingQuestionBoxes)
                        {
                            if(questions.isSelected())
                            {
                                System.out.println(questions.getActionCommand());
                            }
                        }

                        CardLayout cL = (CardLayout)cardPanels.getLayout();
                        cL.show(cardPanels, "instructorPanel");
             }
     }


因此,基本上,当我调用此System.out.println(questions.getActionCommand())时,我试图查看单击的JRadiobutton中的文本。
现在,当我运行程序并选择一个按钮时。什么都没发生。

最佳答案

将按钮放入List<JToggleButton>(例如ArrayList<JToggleButton>)中,然后在需要信息时遍历列表。

for (JToggleButton btn : myButtonList) {
   if (btn.isSelected() {
     String actionCommand = btn.getActionCommand();
     // use the actionCommand here
   }
}


请注意,JToggleButton是JRadioButton的父类,使用它可以将JRadioButtons,JCheckBoxes和JToggleButtons添加到列表中。由于您的JRadioButton不属于ButtonGroup,因此也许您应该使用JCheckBox。



编辑

您现在已经发布了此代码,说明它不起作用:

// Section (A)
ArrayList<JToggleButton> settingQuestionButton = new ArrayList<JToggleButton>();

// Section (B)
for(JToggleButton questions: settingQuestionButon)
{
    if(questions.isSelected())
    {
        System.out.println(questions.getActionCommand());
    }
}


程序中是否同时包含(A)和(B)这两个代码?如果是这样,那是行不通的。您应该在构造函数或某些设置方法中使用(A)。您应该在(A)之后输入创建JRadioButtons或JCheckBoxes,设置它们的actionCommand字符串,将它们放置在GUI中以及将它们添加到ArrayList的代码。

(B)部分的代码(增强的for循环)必须位于响应事件而调用的代码中,可能是在JButton或单选按钮的ActionListener中。

请查看此信息,然后在详细信息中填写我们。请考虑创建并发布sscce为我们说明您的问题。



编辑2
您的代码令人困惑,因为您似乎有两个完全不同的类型完全相同的变量,并且名称完全相同,并且您似乎在假定这将赋予变量神奇的属性,使它能够知道“双胞胎”可能在做什么。 Java不能以这种方式工作,实际上,变量名几乎没有那么重要或很聪明,以允许它们具有任何此类功能。而是您的代码必须很聪明。
我假设将检查一个以上的JCheckBoxes,并且您想检查程序中某个时刻选中了哪些JCheckBox。如果是这样,那么在您的课程中,您应该有一个List或ArrayList字段,例如

private List<JToggleButton> questionsList = new ArrayList<JToggleButton>();


这样,该字段将在整个课程中可用。

然后,在创建JCheckBoxes的位置,将它们添加到此列表中:

  private void setExamButtonActionPerformed(java.awt.event.ActionEvent evt)
   {
       if(evt.getActionCommand().equals("Set Exam"))
       {
           CardLayout cL = (CardLayout)cardPanels.getLayout();
           cL.show(cardPanels, "setExamPanel");
       }

       try
       {
           String theMessage = myObject.getMessage();

           String delims = "(?=(0*([0-9]{1,2}|100)))";
           String[] questions = theMessage.split(delims);

           for (int j = 1; j < questions.length; j++)
           {
               settingQuestionBox = new JCheckBox(questions[j]);  // *** renamed to make more sense
               settingQuestionBox.setActionCommand(questions[j]);  // **** add actionCommand String
               questionsList.add(settingQuestionBox); // ****** add JCheckBox to List

               settingQuestionTextField = new JTextField("");

               jPanel1.add(settingQuestionBox);
               jPanel1.add(settingQuestionTextField);
               jPanel1.revalidate();
               jPanel1.repaint();

           }

           //close streams and socket code

       }
       catch(Exception e)
       {
           // System.out.println(e);
           e.printStackTrace(); // ***** more informative
       }
   }


然后在代码的其他地方

  setExamQuestionButtonActionPerformed(java.awt.event.ActionEvent evt)
  {
     if(evt.getActionCommand().equals("Set Exam Question"))
     {
        // ArrayList<JToggleButton> settingQuestionBoxes = new ArrayList<JToggleButton>();

        for(JToggleButton questions: questionsList)
        {
            if(questions.isSelected())
            {
                System.out.println(questions.getActionCommand());
            }
        }

        CardLayout cL = (CardLayout)cardPanels.getLayout();
        cL.show(cardPanels, "instructorPanel");
      }
  }


当然,您需要注意将ActionListener添加到按钮上

09-25 21:47