我想要一个带有一个 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);
链接。
但我看到的是,您传递了另一个名为 mFrame
的 MainFrame
实例作为参数(作为 ActionListener
)。这个mFrame
永远不会加载列表
pPizza = test.csvRead();
简而言之,您有两个实例MainFrame
:
- 创建一个并用于调用
windowStart
- 在
windowsStart
中创建并用于执行actionPerformed
。
这最后一个永远不会加载数据列表。解释为什么您的列表填充在 windowStart
中,而不是填充在 actionPerformed
中,您实际上使用了两个不同的实例 MainFrame
和两个列表 pPizza
.
您可以通过删除第二个实例并使用第一个实例 this
作为 ActionListener
来纠正此问题
b.addActionListener(this);
关于java - 由于变量不存在,单击按钮后没有输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57709510/