I wanted a frame with one TextArea and one Button. When I press the button, the TextArea should show a food menu of 5 Pizzas, well it shows nothing at all, except for the console which shows
JavaScriptx"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)"
In the method windowsStart() the objects exists and are adjustable. In the actionPerformed()Method the objects are … kind of invisible, not existing?
public void windowStart()
{
MainFrame mFrame = new MainFrame();
PizzaReader2 test = new PizzaReader2();
pPizza = test.csvRead();
System.out.println("nnn" + pPizza.get(0) + "nnn");
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("nnn" + pPizza.get(0) + "nnn");
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");
}
The TextArea should get the value of the ArrayList
Advertisement
Answer
Your exception occurs in : at de.kvwl.pizza.MainFrame.actionPerformed(MainFrame.java:54)
This action is linked during windowStart
with b.addActionListener(mFrame);
.
But What I see is that you pass another instance of MainFrame
called mFrame
as parameter (as an ActionListener
). This mFrame
never load the list with
pPizza = test.csvRead();
So in short, you have two instance MainFrame
:
- one created and use to call
windowStart
- one created in
windowsStart
and use to executeactionPerformed
.
This last one never load the list of data. Explaining why your list is populated in windowStart
but not in actionPerformed
, you are actually using two distinct instance MainFrame
with two list pPizza
.
You can correct this by removing this second instance and use this
, the first instance as an ActionListener
b.addActionListener(this);