Results 1 to 6 of 6
- 06-25-2010, 11:09 AM #1
Member
- Join Date
- Jun 2010
- Posts
- 3
- Rep Power
- 0
Help: passing data from multiple JFrames
Hi, hoping an expert can help me here. See the image of what I am trying to achieve,..

I have created 3 jFrames with jButton options. And I want the 4th jFrame to display (or compute) the combination of buttons selected. So the question is, how do I pass the selected data from different frames/components (example here from the top 3 jFrames) into other frames/components (the bottom frame)?
This is assuming the 4th jFrame can display the selection upon any clicks, Or it can display after all 3 buttons are selected from each 1-3 Frames. Does not matter.
Appreciate your time and help. cheers. :)
- 06-25-2010, 12:22 PM #2
if all JButtons share the same ActionsListener then inside the ActionListener you can check which button was clicked and then compute and display your button combination in the 4th JFrame.
- 06-25-2010, 12:26 PM #3
- Join Date
- Sep 2008
- Location
- Voorschoten, the Netherlands
- Posts
- 11,399
- Blog Entries
- 7
- Rep Power
- 17
There's a nice and simple design pattern for that purpose: the mediator. Your pink component is the mediator here. It has three separate listeners connected to the three green components. It also has three Strings:
... and it has a display method:Java Code:private String actor; private String action; private String actee;
The three listeners fill in the corresponding values, i.e. actor, action or actee and call the display method afterwards.Java Code:if (actor != null && action != null && actee != null) doDisplay(actor+" "+action+" "+actee);
kind regards,
Jos
- 06-25-2010, 05:57 PM #4
Member
- Join Date
- Jun 2010
- Posts
- 3
- Rep Power
- 0
many thanks j2me64 & Jos.
this is the first time im introduced mediator pattern. googled and spent hours trying to figure out the complexity of how it links classes together. once i get it right i'll share the codes for others. cheers.
- 06-26-2010, 02:43 PM #5
Member
- Join Date
- Jun 2010
- Posts
- 3
- Rep Power
- 0
Finally got it working. Thank you again for your help! Here are my codes to share. And also due credit to http://www.avajava.com which I learned the mediator pattern.
RunFrames.java
package components;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import java.awt.event.*;
import java.awt.*;
public class RunFrames extends JFrame {
Mediator mediator = new Mediator();
JDesktopPane desktop;
ActorFrame actorframe = new ActorFrame(mediator);
ActionFrame actionframe = new ActionFrame(mediator);
ActeeFrame acteeframe = new ActeeFrame(mediator);
LogFrame logframe = new LogFrame(mediator);
public RunFrames() {
super("Demo");
setBounds(50, 50, 600, 400);
desktop = new JDesktopPane();
setContentPane(desktop);
desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE );
desktop.add(actorframe);
desktop.add(actionframe);
desktop.add(acteeframe);
desktop.add(logframe);
actorframe.setVisible(true);
actionframe.setVisible(true);
acteeframe.setVisible(true);
logframe.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
RunFrames mainframe = new RunFrames();
mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_ CLOSE);
mainframe.setVisible(true);
}
});
}
}
Mediator.java
package components;
// Learnings from Mediator Pattern - Web Tutorials - avajava.com
// MEDIATOR PATTERN
public class Mediator {
private String actorSelected = null;
private String actionSelected = null;
private String acteeSelected = null;
ActorFrame actorFrame;
ActionFrame actionFrame;
ActeeFrame acteeFrame;
LogFrame logFrame;
public void registerActorFrame(ActorFrame actorFrame) {
this.actorFrame = actorFrame;
}
public void registerActionFrame(ActionFrame actionFrame) {
this.actionFrame = actionFrame;
}
public void registerActeeFrame(ActeeFrame acteeFrame) {
this.acteeFrame = acteeFrame;
}
public void registerLogFrame(LogFrame logFrame) {
this.logFrame = logFrame;
}
public Mediator() {
}
public String theCompleteAction(String actor, String action, String actee) {
String joinedString = actor + " " + action + " " + actee;
logFrame.typeoutText("COMPLETE: " +joinedString);
return joinedString;
}
public String checkActor(String actor) {
actorSelected = actor;
logFrame.typeoutText(actorSelected + " selected.");
if (actorSelected=="Cancel") {actorSelected=null;}
if (actorSelected != null && actionSelected != null && acteeSelected != null)
{
return theCompleteAction(actorSelected,actionSelected,act eeSelected);}
return null;
}
public String checkAction(String action) {
actionSelected = action;
logFrame.typeoutText(actionSelected + " selected.");
if (actionSelected=="Cancel") {actionSelected=null;}
if (actorSelected != null && actionSelected != null && acteeSelected != null)
{
return theCompleteAction(actorSelected,actionSelected,act eeSelected);}
return null;
}
public String checkActee(String actee) {
acteeSelected = actee;
logFrame.typeoutText(acteeSelected + " selected.");
if (acteeSelected=="Cancel") {acteeSelected=null;}
if (actorSelected != null && actionSelected != null && acteeSelected != null)
{
return theCompleteAction(actorSelected,actionSelected,act eeSelected);}
return null;
}
}
ActorFrame.java
package components;
import java.util.Enumeration;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.ButtonGroup;
import javax.swing.BorderFactory;
import javax.swing.border.Border;
import javax.swing.AbstractButton;
import java.awt.event.*;
import java.awt.*;
public class ActorFrame extends JInternalFrame {
Mediator mediator1;
public ActorFrame(Mediator mediator) {
super("Actors",true,true,true,true);
setSize(150,150);
setLocation(30,30);
this.mediator1 = mediator;
this.mediator1.registerActorFrame(this);
// start adding buttons....
JPanel panel = new JPanel(new GridLayout(0, 1));
Border border = BorderFactory.createTitledBorder("Options");
panel.setBorder(border);
final ButtonGroup group = new ButtonGroup();
String[] anArray;
anArray = new String[2];
anArray[0] = "Tarzan";
anArray[1] = "Jane";
ActionListener aListener = new ActionListener() {
public void actionPerformed(ActionEvent event) {
Enumeration elements = group.getElements();
while (elements.hasMoreElements()) {
AbstractButton button = (AbstractButton) elements
.nextElement();
if (button.isSelected()) {
mediator1.checkActor(button.getText());
break;
}
}
group.setSelected(null, true);
}
};
int count = 0;
while (count < 2) {
AbstractButton button1 = new JToggleButton(anArray[count]);
button1.addActionListener(aListener);
panel.add(button1);
group.add(button1);
count++;
}
AbstractButton button1 = new JToggleButton("Cancel");
button1.addActionListener(aListener);
panel.add(button1);
group.add(button1);
// end adding buttons....
setContentPane(panel);
}
}
ActionFrame.java
package components;
import java.util.Enumeration;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JToggleButton;
import javax.swing.ButtonGroup;
import javax.swing.BorderFactory;
import javax.swing.border.Border;
import javax.swing.AbstractButton;
import java.awt.event.*;
import java.awt.*;
public class ActionFrame extends JInternalFrame {
Mediator mediator2;
public ActionFrame(Mediator mediator) {
super("Actions",true,true,true,true);
setSize(150,150);
setLocation(210,30);
this.mediator2 = mediator;
this.mediator2.registerActionFrame(this);
// start adding buttons....
JPanel panel = new JPanel(new GridLayout(0, 1));
Border border = BorderFactory.createTitledBorder("Options");
panel.setBorder(border);
final ButtonGroup group = new ButtonGroup();
String[] anArray;
anArray = new String[2];
anArray[0] = "punches";
anArray[1] = "kicks";
ActionListener aListener = new ActionListener() {
public void actionPerformed(ActionEvent event) {
Enumeration elements = group.getElements();
while (elements.hasMoreElements()) {
AbstractButton button = (AbstractButton) elements
.nextElement();
if (button.isSelected()) {
mediator2.checkAction(button.getText());
break;
}
}
group.setSelected(null, true);
}
};
int count = 0;
while (count < 2) {
AbstractButton button1 = new JToggleButton(anArray[count]);
button1.addActionListener(aListener);
panel.add(button1);
group.add(button1);
count++;
}
AbstractButton button1 = new JToggleButton("Cancel");
button1.addActionListener(aListener);
panel.add(button1);
group.add(button1);
// end adding buttons....
setContentPane(panel);
}
}
ActeeFrame.java
package components;
import java.util.Enumeration;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.ButtonGroup;
import javax.swing.BorderFactory;
import javax.swing.border.Border;
import javax.swing.AbstractButton;
import java.awt.event.*;
import java.awt.*;
public class ActeeFrame extends JInternalFrame {
Mediator mediator3;
public ActeeFrame(Mediator mediator) {
super("Actee",true,true,true,true);
setSize(150,150);
setLocation(390,30);
this.mediator3 = mediator;
this.mediator3.registerActeeFrame(this);
// start adding buttons....
JPanel panel = new JPanel(new GridLayout(0, 1));
Border border = BorderFactory.createTitledBorder("Options");
panel.setBorder(border);
final ButtonGroup group = new ButtonGroup();
String[] anArray;
anArray = new String[2];
anArray[0] = "Panther";
anArray[1] = "Gorilla";
ActionListener aListener = new ActionListener() {
public void actionPerformed(ActionEvent event) {
Enumeration elements = group.getElements();
while (elements.hasMoreElements()) {
AbstractButton button = (AbstractButton) elements
.nextElement();
if (button.isSelected()) {
mediator3.checkActee(button.getText());
break;
}
}
group.setSelected(null, true);
}
};
int count = 0;
while (count < 2) {
AbstractButton button1 = new JToggleButton(anArray[count]);
button1.addActionListener(aListener);
panel.add(button1);
group.add(button1);
count++;
}
AbstractButton button1 = new JToggleButton("Cancel");
button1.addActionListener(aListener);
panel.add(button1);
group.add(button1);
// end adding buttons....
setContentPane(panel);
}
}
LogFrame.java
package components;
import java.util.Enumeration;
import javax.swing.*;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JToggleButton;
import javax.swing.ButtonGroup;
import javax.swing.BorderFactory;
import javax.swing.border.Border;
import javax.swing.AbstractButton;
import java.awt.event.*;
import java.awt.*;
public class LogFrame extends JInternalFrame {
Mediator mediator4;
protected JTextArea textArea;
private final static String newline = "\n";
public LogFrame(Mediator mediator) {
super("Action Log",true,true,true,true);
setSize(300,150);
setLocation(30,210);
this.mediator4 = mediator;
this.mediator4.registerLogFrame(this);
// start adding text area....
JPanel panel = new JPanel(new GridLayout(0, 1));
Border border = BorderFactory.createTitledBorder("Options");
panel.setBorder(border);
textArea = new JTextArea(5, 20);
textArea.setEditable(false);
JScrollPane scrollPane = new JScrollPane(textArea);
panel.add(scrollPane);
// end adding text area....
setContentPane(panel);
}
public void typeoutText(String text) {
textArea.append(text + newline);
textArea.setCaretPosition(textArea.getDocument().g etLength());
}
}
- 06-26-2010, 02:55 PM #6
- Join Date
- Sep 2008
- Location
- Voorschoten, the Netherlands
- Posts
- 11,399
- Blog Entries
- 7
- Rep Power
- 17
Similar Threads
-
Is there any standard way to manage multiple JFrames?
By nfh in forum AWT / SwingReplies: 4Last Post: 11-13-2009, 12:30 PM -
Passing data between dialogs
By Wintery in forum New To JavaReplies: 7Last Post: 01-02-2009, 05:35 AM -
Need help passing data between classes
By bri1547 in forum New To JavaReplies: 3Last Post: 07-21-2008, 04:19 AM -
passing data dynamically
By abhiN in forum Advanced JavaReplies: 1Last Post: 01-22-2008, 09:43 AM -
passing dynamic data
By abhiN in forum Web FrameworksReplies: 0Last Post: 01-17-2008, 01:16 PM


LinkBack URL
About LinkBacks
Reply With Quote
Bookmarks