mbunkows
asked on
Dialog info (take 2)
I asked a question earlier about passing data between dialog and parent with events.
I have tried to implement that solution which seemed to be fairly straight forward (and im sure was)
the following code works until i try to send data through an event if the data is transferred right away (through the constructer) i have no problem.
Also creating the new instance of the dialog seems a bit strange to have to pass the parent (itself) twice...
I seem to be real close to getting this accomplished, I just need a gentle push (or violent shove (you choose)) in the right direction.
The code is as follows:
(please excuse the non-conventional class/file names .. this was suppose to be a quick test)
/** testGUI is the main Frame that displays dialog info
//testGUI.java
*/
import java.awt.*;
import java.awt.event.*;
public class testGUI extends Frame implements DataChanger {
TextArea sentence;
Button button1;
TextField field;
testGUI() {
this.setBackground(Color.l ightGray);
this.setLayout(new FlowLayout(FlowLayout.CENT ER,10,10)) ;
field= new TextField(10);
this.add(field);
sentence= new TextArea(10,75);
sentence.setEditable(false );
this.add(sentence);
button1=new Button("TRY");
button1.addActionListener( new B1());
this.add(button1);
}
public String getListData() {
return field.getText();
}
public void setTextData(String data) {
sentence.append("Received from dialog: " + data + "\n");
}
class B1 implements ActionListener {
public void actionPerformed(ActionEven t e) {
testlog d= new testlog(testGUI.this,testG UI.this);
d.show();
}
}
public static void main(String[] args) {
Frame f= new testGUI();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{System.exit(0);}
});
f.pack();
f.setVisible(true);
}
}
/** testlog is the class that implements the dialog box and
handles the events
//testlog.java
*/
import java.awt.*;
import java.awt.event.*;
public class testlog extends Dialog {
Button ok;
Button cancel;
TextField text;
DataChanger dc;
testlog(Frame parent,DataChanger dc) {
super(parent,"Test",true);
this.setLayout(new FlowLayout(FlowLayout.CENT ER,10,10)) ;
text= new TextField(10);
this.add(text);
ok= new Button("OK");
ok.addActionListener(new BOK());
cancel= new Button("CANCEL");
cancel.addActionListener(n ew BCAN());
this.add(ok);
this.add(cancel);
text.setText(dc.getListDat a());
dc.setTextData("from constructer"); //works
this.pack();
}
class BOK implements ActionListener {
public void actionPerformed(ActionEven t e) {
dc.setTextData("from event"); //does not work
}
}
class BCAN implements ActionListener {
public void actionPerformed(ActionEven t e) {
testlog.this.dispose();
}
}
}
/**
DataChanger is the the interface
//DataChanger.java
*/
public interface DataChanger {
public String getListData();
public void setTextData(String data);
}
I have tried to implement that solution which seemed to be fairly straight forward (and im sure was)
the following code works until i try to send data through an event if the data is transferred right away (through the constructer) i have no problem.
Also creating the new instance of the dialog seems a bit strange to have to pass the parent (itself) twice...
I seem to be real close to getting this accomplished, I just need a gentle push (or violent shove (you choose)) in the right direction.
The code is as follows:
(please excuse the non-conventional class/file names .. this was suppose to be a quick test)
/** testGUI is the main Frame that displays dialog info
//testGUI.java
*/
import java.awt.*;
import java.awt.event.*;
public class testGUI extends Frame implements DataChanger {
TextArea sentence;
Button button1;
TextField field;
testGUI() {
this.setBackground(Color.l
this.setLayout(new FlowLayout(FlowLayout.CENT
field= new TextField(10);
this.add(field);
sentence= new TextArea(10,75);
sentence.setEditable(false
this.add(sentence);
button1=new Button("TRY");
button1.addActionListener(
this.add(button1);
}
public String getListData() {
return field.getText();
}
public void setTextData(String data) {
sentence.append("Received from dialog: " + data + "\n");
}
class B1 implements ActionListener {
public void actionPerformed(ActionEven
testlog d= new testlog(testGUI.this,testG
d.show();
}
}
public static void main(String[] args) {
Frame f= new testGUI();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{System.exit(0);}
});
f.pack();
f.setVisible(true);
}
}
/** testlog is the class that implements the dialog box and
handles the events
//testlog.java
*/
import java.awt.*;
import java.awt.event.*;
public class testlog extends Dialog {
Button ok;
Button cancel;
TextField text;
DataChanger dc;
testlog(Frame parent,DataChanger dc) {
super(parent,"Test",true);
this.setLayout(new FlowLayout(FlowLayout.CENT
text= new TextField(10);
this.add(text);
ok= new Button("OK");
ok.addActionListener(new BOK());
cancel= new Button("CANCEL");
cancel.addActionListener(n
this.add(ok);
this.add(cancel);
text.setText(dc.getListDat
dc.setTextData("from constructer"); //works
this.pack();
}
class BOK implements ActionListener {
public void actionPerformed(ActionEven
dc.setTextData("from event"); //does not work
}
}
class BCAN implements ActionListener {
public void actionPerformed(ActionEven
testlog.this.dispose();
}
}
}
/**
DataChanger is the the interface
//DataChanger.java
*/
public interface DataChanger {
public String getListData();
public void setTextData(String data);
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
You have to pass it twice unless you can be assured that your DataChanger is a parent frame.
ASKER
Ahhh great thanks
Let me know if you didnt get the right amount of points that were originally assigned
My last couple questions have that problem
:(
Let me know if you didnt get the right amount of points that were originally assigned
My last couple questions have that problem
:(
ASKER
major oversight on my part
you answered my main question but if you have any comments on the question about having to pass both a Frame and a DataChanger (via testGUI.this) that would be great
it seems to be repetitious
Thanks