我想要一个带有一个TextArea和一个Button的框架。
当我按下按钮时,TextArea应该显示5个披萨的食物菜单,除了控制台显示以外,它什么都没有显示


"Exception in thread "AWT-EventQueue-0"
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at de.kvwl.pizza.MainFrame.actionPerformed(MainFrame.java:54)"



在方法windowsStart()中,对象存在并且可以调整。
在actionPerformed()方法中,对象是……某种不可见的,不存在?

public void windowStart()
{
    MainFrame mFrame = new MainFrame();
    PizzaReader2 test = new PizzaReader2();
    pPizza = test.csvRead();

    System.out.println("\n\n\n" + pPizza.get(0) + "\n\n\n");

    f = new JFrame("Textfield");
    b = new JButton("Menu");
    jt = new JTextArea(10,10);
    JPanel pTextArea = new JPanel();
    b.addActionListener(mFrame);

    pTextArea.add(jt);
    pTextArea.add(b);
    f.add(pTextArea);

    f.setSize(300, 300);
    f.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
    //jt.setText("TestText");
    System.out.println("\n\n\n" + pPizza.get(0) + "\n\n\n");

    String s = e.getActionCommand();
    if (s.equals("Menu"))
    {
        System.out.println("Button gedrückt");
        //jt.setText("");
        for (int i = 0; i < pPizza.size(); i++)
        {
            jt.append(pPizza.get(i)+"\n");
        }


TextArea应该获取ArrayList的值

最佳答案

您的例外发生在:at de.kvwl.pizza.MainFrame.actionPerformed(MainFrame.java:54)

此操作在windowStart期间与b.addActionListener(mFrame);链接在一起。

但是我看到的是,您传递了另一个名为MainFramemFrame实例作为参数(作为ActionListener)。此mFrame永远不会使用以下方式加载列表

pPizza = test.csvRead();


简而言之,您有两个实例MainFrame


一个创建并用于调用windowStart
windowsStart中创建的一个,用于执行actionPerformed


最后一个永远不会加载数据列表。解释为什么在windowStart中而不是在actionPerformed中填充列表,实际上您使用的是两个不同的实例MainFrame和两个列表pPizza

您可以通过删除第二个实例并将第一个实例this用作ActionListener来更正此问题。

b.addActionListener(this);

10-08 01:36