如何将arraylist项设置为JButton

时间:2018-03-08 17:03:33

标签: java swing arraylist jbutton

我正在制作一个游戏,其中提出问题并且玩家通过选择四个按钮中的一个来回答它们。我有两个课程,一个是问题和问题按钮'另一个是' Main'。我想从“问题和关键词”中的字符串组合中获取一个元素。分类并将其显示在我的主要'中的JButton上。类。

当'一般知识'单击按钮,我想将arraylist项目设置为JButton' option1'。

主要课程:

   generalKnowledge.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Categories1.setVisible(false);
                GeneralKnowledge1.setVisible(true);

                String q = quest.getAQuestion(0);
                question1.setText(q);

                String b1 = quest.getButtons(0);
                option1.setText(b1);
            }
        });

QuestionsAndButtons类:

private ArrayList<String> buttonsGK1;

public  QuestionsAndButtons(){

    questionsGeneralKnowledge=new ArrayList<>();
    buttonsGK1=new ArrayList<>();

    buttonsGK1.add("Eeyore");
    buttonsGK1.add("Tigger");
    buttonsGK1.add("Piglet");
    buttonsGK1.add("Rabbit");

}

public String getButtons(int j) {
    return buttonsGK1.get(j);
}

此外,每次运行我的代码时,只要点击“常识”,我就会收到此错误消息。按钮:

线程中的异常&#34; AWT-EventQueue-0&#34; java.lang.IndexOutOfBoundsException:索引0越界长度为0

3 个答案:

答案 0 :(得分:1)

您需要使用数组中的每个选项创建JButton

  1. 创建一个与期权长度相同的JButton数组
  2. 对选项进行迭代,并使用选项
  3. 创建新的JButton
  4. 将每个JButton添加到您正在使用的JPanel / JFrame
  5. 例如:

    import java.awt.BorderLayout;
    import java.awt.GridLayout;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    
    public class ArrayToButtons {
        private JFrame frame;
        private JPanel pane;
        private JButton[] buttons;
        private static final String[] OPTIONS = {"Eagle", "Rabbit", "Dolphin", "Apple"};
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new ArrayToButtons()::createAndShowGui);
        }
    
        private void createAndShowGui() {
            frame = new JFrame(getClass().getSimpleName());
            pane = new JPanel();
            pane.setLayout(new GridLayout(2, 2));
    
            buttons = new JButton[OPTIONS.length];
    
            for (int i = 0; i < buttons.length; i++) {
                buttons[i] = new JButton(OPTIONS[i]);
                pane.add(buttons[i]);
            }
    
            frame.add(new JLabel("Which is not an animal?"), BorderLayout.NORTH);
            frame.add(pane, BorderLayout.CENTER);
    
            frame.pack();
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }
    

    enter image description here

答案 1 :(得分:0)

我很感谢你的答案@Frakcool,但我已经有了一个界面,因为我正在使用GUI表单,所以我想要的是一个简单的方法来设置我的arraylist到我的JButton'option1'的答案之一。

有没有办法解决这个问题?

Here is what the UI looks like:

答案 2 :(得分:0)

将按钮放在数组或列表中,然后迭代按钮数组和标题数组并设置标题:

JButton buttons[];
List<String> titles = quest.getButtons();

for (int i = 0; i < titles.size(); i++) {
    buttons[i].setText(titles.get(i));
}

其中quest.getButtons()返回样本中的buttonsGK1字段。

创建GUI时需要初始化buttons数组。 Frakcool's answer显示了所有这些方面,您只需要采用自己案例的解决方案。