JFrame and CardLayout -- Wrong Parent
So here is my code. It is three parts, 2 are shown, the last is not relevant:
Code:
//First file
import javax.swing.*;
import java.awt.event.*;
import java.lang.String;
import java.lang.Object;
import java.util.Formatter;
import java.awt.*;
public class ToDoItBetterAgain extends JFrame
{
//Attributes
private CardLayout myCard;
private MainPanel mainPanel;
private AddPanel addPanel;
public static void main(String[] args)
{
new ToDoItBetterAgain();
}
ToDoItBetterAgain()
{
this.setSize(600,400);
setVisible(true);
//Card Layout
myCard = new CardLayout();
setLayout(myCard);
//Cards
mainPanel = new MainPanel(myCard, this);
addPanel = new AddPanel(myCard, this);
add(mainPanel, "Main");
add(addPanel, "Add");
}
}
Code:
//First Panel
import javax.swing.*;
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.lang.String;
import java.lang.Object;
import java.util.Formatter;
class MainPanel extends JPanel
{
private JButton add, apply;
private JLabel error, topLabel, bigLabel; //bigLabel - JTextArea?
private CardLayout myCard;
private JFrame original;
public MainPanel(CardLayout myCard, JFrame original)
{
this.myCard = myCard;
this.original = original;
//North - topLabel
JPanel north = new JPanel();
LabelFormat big = new LabelFormat("Name","Date","Time","Remove","Delete");
topLabel = new JLabel(big.getActualString());
topLabel.setFont(new Font("Times New Roman", Font.PLAIN, 18));
topLabel.setForeground(Color.BLUE);
north.add(topLabel);
//Center - bigLabel
bigLabel = new JLabel("");
bigLabel.setVerticalAlignment(SwingConstants.TOP);
bigLabel.setHorizontalAlignment(SwingConstants.LEFT);
bigLabel.setFont(new Font("Times New Roman", Font.PLAIN, 16));
bigLabel.setText("No Events");
//East - Check Boxes
//South - Error label, Add/Apply buttons
JPanel south = new JPanel();
//Buttons
JPanel subsouth1 = new JPanel();
add = new JButton("ADD");
apply = new JButton("APPLY");
subsouth1.setLayout(new FlowLayout(FlowLayout.RIGHT));
subsouth1.add(add);
subsouth1.add(apply);
//Label
JPanel subsouth2 = new JPanel();
error = new JLabel("");
error.setForeground(Color.RED);
subsouth2.setLayout(new FlowLayout(FlowLayout.LEFT));
subsouth2.add(error);
south.setLayout(new GridLayout(1,2));
south.add(subsouth2);
south.add(subsouth1);
//Put it all together
setLayout(new BorderLayout());
add(north, BorderLayout.NORTH);
add(bigLabel, BorderLayout.CENTER);
add(south, BorderLayout.SOUTH);
//Button Listeners
ButtonListener listener = new ButtonListener();
apply.addActionListener(listener);
add.addActionListener(listener);
}
private class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
if(event.getSource() == add)
{
myCard.last(original);
}
else if(event.getSource() == apply)
{
}
else
{
error.setText("Error");
}
}
}
}
The files compile correctly. The file opens and MainPanel loads properly. However, when I hit the "Add" button I get this error:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: wrong parent for CardLayout
at java.awt.CardLayout.checkLayout(CardLayout.java:38 4)
at java.awt.CardLayout.last(CardLayout.java:479)
at MainPanel$ButtonListener.actionPerformed(MainPanel .java:82)
at javax.swing.AbstractButton.fireActionPerformed(Abs tractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed (AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultB uttonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.jav a:6289)
at javax.swing.JComponent.processMouseEvent(JComponen t.java:3267)
at java.awt.Component.processEvent(Component.java:605 4)
at java.awt.Container.processEvent(Container.java:204 1)
at java.awt.Component.dispatchEventImpl(Component.jav a:4652)
at java.awt.Container.dispatchEventImpl(Container.jav a:2099)
at java.awt.Component.dispatchEvent(Component.java:44 82)
at java.awt.LightweightDispatcher.retargetMouseEvent( Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(C ontainer.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Conta iner.java:4168)
at java.awt.Container.dispatchEventImpl(Container.jav a:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478 )
at java.awt.Component.dispatchEvent(Component.java:44 82)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.j ava:644)
at java.awt.EventQueue.access$000(EventQueue.java:85)
at java.awt.EventQueue$1.run(EventQueue.java:603)
at java.awt.EventQueue$1.run(EventQueue.java:601)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectio nPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectio nPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:617)
at java.awt.EventQueue$2.run(EventQueue.java:615)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectio nPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java: 614)
at java.awt.EventDispatchThread.pumpOneEventForFilter s(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(E ventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:122)
So I'm guessing I am calling the wrong parent, but I don't know who is the real parent is. I'm guessing this is just a rookie mistake, and hoping.
Thanks