actions on JPanel objects

M

mwave3k

I have a main project GUI with tabs on it. these tabs have JPanels
with various JComponents on them. The JPanels are all made in seperate
classes that extend JPanel. the point of that is to make my code a
little cleaner. All the components in JPanel are private. However, I
don't know how to add an ActionListener to buttons and other components
on the JPanel and recieve these actions in the main project rather then
the JPanel class. Help please? i would appreciate it
 
I

Ian Wilson

mwave3k said:
I have a main project GUI with tabs on it. these tabs have JPanels
with various JComponents on them. The JPanels are all made in seperate
classes that extend JPanel. the point of that is to make my code a
little cleaner. All the components in JPanel are private.

Seems familar.
However, I
don't know how to add an ActionListener to buttons and other components
on the JPanel and recieve these actions in the main project rather then
the JPanel class.

Me neither, so what I do instead is, have each panel implement
ActionListener and pass the panel a reference to the JFrame in it's
constructor, then the actionListener can invoke a method in the JFrame
to handle the event.

e.g. something not entirely unlike this

JPanel Foo extends JPanel implements ActionListener {
JFrame parent;
Foo(JFrame parent) {
this.parent = parent;
...
fooButton.addActionListener(this);
...
}
public void actionPerformed(ActionEvent e) {
parent.doCommand(e.getActionCommand());
}
}

untested, caveat emptor.
 
I

Ian Wilson

Ian said:
Seems familar.



Me neither, so what I do instead is, have each panel implement
ActionListener and pass the panel a reference to the JFrame in it's
constructor, then the actionListener can invoke a method in the JFrame
to handle the event.

e.g. something not entirely unlike this

JPanel Foo extends JPanel implements ActionListener {
JFrame parent;
Foo(JFrame parent) {
this.parent = parent;
...
fooButton.addActionListener(this);
...
}
public void actionPerformed(ActionEvent e) {
parent.doCommand(e.getActionCommand());
}
}

It occurrs to me you could just do
fooButton.addActionListener(parent);
and add some comment's in the parent's actionPerformed() to clarify that
it receives events from random JPanels.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,578
Members
45,052
Latest member
LucyCarper

Latest Threads

Top