java - 如何将数组列表项设置为 JButton

标签 java swing arraylist jbutton

我正在制作一款游戏,玩家会提出问题,然后通过选择四个按钮之一来回答问题。我有两个类,一个是“QuestionsAndButtons”,另一个是“Main”。我想从“QuestionsAndButtons”类中的字符串数组列表中获取一个元素,并将其显示到“Main”类中的 JButton 上。

当单击“generalknowledge”按钮时,我想将 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);
}

此外,每次运行代码时,只要单击“一般知识”按钮,我就会收到此错误:

线程“AWT-EventQueue-0”中的异常 java.lang.IndexOutOfBoundsException:索引 0 超出长度 0 的范围

最佳答案

使用数组中的每个选项创建一个 JButton 所需要做的就是:

  1. 创建与选项长度相同的 JButton 数组
  2. 迭代您的选项并使用选项文本创建一个新的 JButton
  3. 将每个 JButton 添加到您正在使用的 JPanel/JFrame

例如:

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

关于java - 如何将数组列表项设置为 JButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49178594/

相关文章:

java - Estado HTTP 500...无法打开连接

java - 如何将 hibernate 关联映射从 'one to many' 更改为 'many to many'?

java - 为什么我的 JButtons 在放入 JPanel 的构造函数时不显示?

java - 使用相等性从 ArrayList 中删除对象

java - 如何在 C++ 中从 private 初始化构造函数内部的 vector ,类似于 Java 中的 ArrayList

java - 如何调试这段代码以了解它在做什么?

java - 无法查找主机 Cluster0-XXXXX.mongodb.net 的 TXT 记录

java - 通过线程访问

java - JTextPane 问题 - 光标位置位于末尾

java - 在仍在使用时使用迭代器从 ArrayList 中删除内容