java - Changing the value of a textfied in JFrame class1, JFrame class2,... by selecting an item from jtable in Jframe class3 -


i have 14 jframe classes , 1 jframe class holding jtable acts calendar. want date of text field or other component in of 14 jframe classes changed when user selects date jtable calendar . now, frames appear 1 @ time , jtable instantiated jbutton on of 14 jframe classes.

my dilemma how identify jframe class has instantiated jframe contains jtable it's text field value can changed.

code instantiates jframe containing table:

private void jbutton1actionperformed(java.awt.event.actionevent evt) {                                              jframe frmmain = new calender();     frmmain.setvisible(true);     frmmain.setsize(367, 342); } 

code changes value of textfield 1 of 14 jframe classes :

@override public void mouseclicked(mouseevent me) {     if (me.getclickcount()==2){         int selected1 =    jtable1.getselectionmodel().getleadselectionindex();         int selected2 =jtable1.getcolumnmodel().getselectionmodel().getleadselectionindex();          object c = jtable1.getmodel().getvalueat(selected1, selected2);         sowinformation.jtextfield4.settext(c.tostring());         this.setvisible(false);     } } 

where sowinformation 1 of 14 jframe classes.

as @andrewthompson wisely mentioned, the use of multiple jframe bad practice. in case (non-)modal dialog better choice.

now let's assume choose non-modal dialogs, still having same problem. there several ways solve need keep reference frame/dialog opened calendar's frame. better, can use interfaces define contract update text field isolating desired behavior actual implementation. example:

public interface iupdatetext {      public void updatetext(string text);  } 

now calendar's frame needs keep reference iupdatetext compliant object:

class calender extends jframe {     ...     private iupdatetext updatetext;     ...     public void setiupdatetext(iupdatetext ut) {         this.updatetext = ut;     }     ... } 

then in mouse listener implementation call updatetext() method:

@override public void mouseclicked(mouseevent me) {     if (me.getclickcount()==2){         int selectedrow = jtable1.getselectedrow();         int selectedcolumn = jtable1.getselectedcolumn();         if (selectedrow > -1 && selectedcolumn > -1) {             object value = jtable1.getvalueat(selectedrow, selectedcolumn); // ask value view, not model. otherwise need convert both row , column indexes             this.updatetext.updatetext(value.tostring());             this.setvisible(false); // maybe this.dispose() instead ?         }     } } 

of course other frames/dialogs can open calendar frame have implement iupdatetext interface. example sowinformation frame:

class sowinformation extends jframe implements iupdatetext {     ...     private jtextfield jtextfield4;     ...     @override     public void updatetext(string text) {         this.jtextfield4.settext(text);     }     ... } 

and set iupdatetext compliant object calendar frame when instantiate it:

private void jbutton1actionperformed(java.awt.event.actionevent evt) {                                              calender frmmain = new calender();     calender.setiupdatetext(this);  // assuming 'this' iupdatetext interface compliant     frmmain.pack();     frmmain.setvisible(true); } 

other comments

from architectural point of view problem might better solved through mvc pattern, having controller acts intermediary both frames/dialogs. there multiple questions about mvc pattern , swing here in example/explanation shown in this answer @madprogrammer (a real swing guru).


Comments

Popular posts from this blog

java - Oracle EBS .ClassNotFoundException: oracle.apps.fnd.formsClient.FormsLauncher.class ERROR -

c# - how to use buttonedit in devexpress gridcontrol -

nvd3.js - angularjs-nvd3-directives setting color in legend as well as in chart elements -