dhaya
asked on
design help
looks big, but the question context is in "passing object references only by value"
PCPanel1 p1 = new PCPanel1(data1);
p1.addComp2();
i have trouble passing the PCMainPanel object also here so that it can be called back by the back button using the reference (oops...reference passed by value..)
how to acheive this without creating one more instance or clone()
-------------------------- ---------- ---------- ---------- ---------- ---------- ---------- ------
package com.samples.testmemory;
import javax.swing.*;
import java.awt.*;
import java.beans.*;
import java.io.*;
public class PCApp
{
public static PCFrame frame;
public PCApp()
{
try
{
jbInit();
}
catch(Exception e)
{
e.printStackTrace();
}
}
private void jbInit() throws Exception
{
frame = (PCFrame) Beans.instantiate(getClass ().getClas sLoader(), PCFrame.class.getName());
frame.setVisible(true);
frame.setStatusText2("");
frame.setStatusText3("");
frame.setTitle("Passing reference by value test ");
frame.toFront();
frame.setVisible(true);
frame.requestFocus();
System.out.println("App class jbInit()");
}
public void RunProg()
{
//if all property file , connections correct
System.out.println("App class runProg()");
frame.RunProg();
}
public static void main(String[] args)
{
//security checking
System.out.println("Main method");
PCApp a1 = new PCApp();
a1.RunProg();
}
}
-------------------------- ---------- ---------- ---------- ---------- ---------- -------
package com.samples.testmemory;
import com.samples.beans.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import com.samples.testmemory.*;
public class PCFrame extends LayoutBean
{
private PCMainPanel mainPanelClass;
private PCData DataClass;
public PCFrame()
{
try {
jbInit();
}
catch(Exception e) {
System.out.println("Except ion: " + e.getMessage());
}
}
private void jbInit() throws Exception
{
System.out.println("App class jbInit()");
}
public void RunProg()
{
//if all property file , connections correct
try
{
DataClass = new PCData("test", "conn");
System.out.println("Frame class RunProg()");
launchMainPanel();
}
catch (Exception e)
{
JOptionPane.showMessageDia log(this, "Error retreiving data. See error log.");
}
}
public void launchMainPanel()
{
System.out.println("Launch main panel");
mainPanelClass = new PCMainPanel(DataClass);
mainPanelClass.addComp1();
}
}
-------------------------- ---------- ---------- ---------- ---------- ---------- -------
package com.samples.testmemory;
public class PCData
{
private String dbconn;
private String dbname;
public PCData(String databaseName, String conn)
{
System.out.println("Data constructor()");
dbconn = conn;
dbname = databaseName;
}
}
-------------------------- ---------- ---------- ---------- ---------- ---------- -------
package com.samples.testmemory;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class PCMainPanel
{
private PCFrame frame1;
private PCData data1;
private JPanel panel1;
private JButton btnDetails;
public PCMainPanel(PCData data)
{
data1 = data;
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
public void jbInit() throws Exception {
}
public void addComp1() {
PCApp.frame.getMasterPanel ().removeA ll();
panel1 = new JPanel();
panel1.add(new JLabel("screen1"));
btnDetails = new JButton("Claim Details");
btnDetails.setPreferredSiz e(new Dimension(110, 22));
btnDetails.setMinimumSize( new Dimension(110, 22));
btnDetails.addActionListen er(new ActionListener ()
{
public void actionPerformed(ActionEven t e)
{
PCPanel1 p1 = new PCPanel1(data1);
p1.addComp2();
}
});
panel1.add(btnDetails);
PCApp.frame.getMasterPanel ().add(pan el1);
PCApp.frame.repaint();
PCApp.frame.validate();
}
}
-------------------------- ---------- ---------- ---------- ---------- ---------- -------
package com.samples.testmemory;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class PCPanel1
{
private PCFrame frame1;
private PCData data1;
private PCMainPanel mainPanel;
private JPanel panel1;
private JButton btnBack;
public PCPanel1(PCData data)
{
data1 = data;
}
public PCPanel1(PCData data, PCMainPanel PCPanel)
{
data1 = data;
mainPanel = PCPanel;
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
public void jbInit() throws Exception {
}
public void addComp2() {
panel1 = new JPanel();
panel1.add(new JLabel("screen2"));
btnBack = new JButton(" Back ");
btnBack.setPreferredSize(n ew Dimension(110, 22));
btnBack.setMinimumSize(new Dimension(110, 22));
btnBack.addActionListener( new ActionListener ()
{
public void actionPerformed(ActionEven t e)
{
mainPanel.addComp1();
}
});
panel1.add(btnBack);
PCApp.frame.getMasterPanel ().add(pan el1);
PCApp.frame.repaint();
PCApp.frame.validate();
}
}
-------------------------- ---------- ---------- ---------- ---------- ---------- -------
PCPanel1 p1 = new PCPanel1(data1);
p1.addComp2();
i have trouble passing the PCMainPanel object also here so that it can be called back by the back button using the reference (oops...reference passed by value..)
how to acheive this without creating one more instance or clone()
--------------------------
package com.samples.testmemory;
import javax.swing.*;
import java.awt.*;
import java.beans.*;
import java.io.*;
public class PCApp
{
public static PCFrame frame;
public PCApp()
{
try
{
jbInit();
}
catch(Exception e)
{
e.printStackTrace();
}
}
private void jbInit() throws Exception
{
frame = (PCFrame) Beans.instantiate(getClass
frame.setVisible(true);
frame.setStatusText2("");
frame.setStatusText3("");
frame.setTitle("Passing reference by value test ");
frame.toFront();
frame.setVisible(true);
frame.requestFocus();
System.out.println("App class jbInit()");
}
public void RunProg()
{
//if all property file , connections correct
System.out.println("App class runProg()");
frame.RunProg();
}
public static void main(String[] args)
{
//security checking
System.out.println("Main method");
PCApp a1 = new PCApp();
a1.RunProg();
}
}
--------------------------
package com.samples.testmemory;
import com.samples.beans.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import com.samples.testmemory.*;
public class PCFrame extends LayoutBean
{
private PCMainPanel mainPanelClass;
private PCData DataClass;
public PCFrame()
{
try {
jbInit();
}
catch(Exception e) {
System.out.println("Except
}
}
private void jbInit() throws Exception
{
System.out.println("App class jbInit()");
}
public void RunProg()
{
//if all property file , connections correct
try
{
DataClass = new PCData("test", "conn");
System.out.println("Frame class RunProg()");
launchMainPanel();
}
catch (Exception e)
{
JOptionPane.showMessageDia
}
}
public void launchMainPanel()
{
System.out.println("Launch
mainPanelClass = new PCMainPanel(DataClass);
mainPanelClass.addComp1();
}
}
--------------------------
package com.samples.testmemory;
public class PCData
{
private String dbconn;
private String dbname;
public PCData(String databaseName, String conn)
{
System.out.println("Data constructor()");
dbconn = conn;
dbname = databaseName;
}
}
--------------------------
package com.samples.testmemory;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class PCMainPanel
{
private PCFrame frame1;
private PCData data1;
private JPanel panel1;
private JButton btnDetails;
public PCMainPanel(PCData data)
{
data1 = data;
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
public void jbInit() throws Exception {
}
public void addComp1() {
PCApp.frame.getMasterPanel
panel1 = new JPanel();
panel1.add(new JLabel("screen1"));
btnDetails = new JButton("Claim Details");
btnDetails.setPreferredSiz
btnDetails.setMinimumSize(
btnDetails.addActionListen
{
public void actionPerformed(ActionEven
{
PCPanel1 p1 = new PCPanel1(data1);
p1.addComp2();
}
});
panel1.add(btnDetails);
PCApp.frame.getMasterPanel
PCApp.frame.repaint();
PCApp.frame.validate();
}
}
--------------------------
package com.samples.testmemory;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class PCPanel1
{
private PCFrame frame1;
private PCData data1;
private PCMainPanel mainPanel;
private JPanel panel1;
private JButton btnBack;
public PCPanel1(PCData data)
{
data1 = data;
}
public PCPanel1(PCData data, PCMainPanel PCPanel)
{
data1 = data;
mainPanel = PCPanel;
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
public void jbInit() throws Exception {
}
public void addComp2() {
panel1 = new JPanel();
panel1.add(new JLabel("screen2"));
btnBack = new JButton(" Back ");
btnBack.setPreferredSize(n
btnBack.setMinimumSize(new
btnBack.addActionListener(
{
public void actionPerformed(ActionEven
{
mainPanel.addComp1();
}
});
panel1.add(btnBack);
PCApp.frame.getMasterPanel
PCApp.frame.repaint();
PCApp.frame.validate();
}
}
--------------------------
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
just take away the layoutbean , it just has a specific layout, it can just be a frame.
ASKER
sorry for the long code,
any example that has 2 screens with a back button and can navigate without a cord layout is what i need. (i assume these two screens will be adding and removing components from a frame).
any example that has 2 screens with a back button and can navigate without a cord layout is what i need. (i assume these two screens will be adding and removing components from a frame).
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
btnDetails.addActionListen er(new ActionListener ()
{
public void actionPerformed(ActionEven t e)
{
PCPanel1 p1 = new PCPanel1(data1,PCMainPanel .this);
p1.addComp2();
}
});
i just got some help and looks like i can pass like this
PCMainPanel.this
i am new and don't know if this is the right way to do ..
{
public void actionPerformed(ActionEven
{
PCPanel1 p1 = new PCPanel1(data1,PCMainPanel
p1.addComp2();
}
});
i just got some help and looks like i can pass like this
PCMainPanel.this
i am new and don't know if this is the right way to do ..
That way may work, but you will still be creating some parts new again. But if you are happy with it then thats good.
ASKER
ie my first screen is invoked like this in Frame class
public void launchMainPanel()
{
System.out.println("Launch
mainPanelClass = new PCMainPanel(DataClass);
mainPanelClass.addComp1();
}
my second screen is invoked like this in another class
PCPanel1 p1 = new PCPanel1(data1);
p1.addComp2();
???
PCPanel1 p1 = new PCPanel1(data1, ??????????);
???
i have trouble to get this object here and pass it on to the next class...
i am trying to think how to pass the mainPanelClass to another class so that when back button is clicked i can call the method back without creating one more instance
btnBack.addActionListener(
{
public void actionPerformed(ActionEven
{
mainPanel.addComp1();
}
});
finally, i am just trying to split into many classes the code which can be done in one class