i have 2 classes mainframe
, test
. mainframe
class contains 2 components jbutton
, jlabel
.
i want text of jlabel
changed when invoke settext()
method test
class creating instance of mainframe
in test
class, when click jbutton
. unfortunately neither settext()
nor gettext()
work test
class. how can achieve it?
here's code.
mainframe.java:
public class mainframe extends javax.swing.jframe { public mainframe() { initcomponents(); } private void initcomponents() { labeltoset = new javax.swing.jlabel(); clickmebutton = new javax.swing.jbutton(); setdefaultcloseoperation(javax.swing.windowconstants.exit_on_close); labeltoset.settext("hello"); clickmebutton.settext("click me"); clickmebutton.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { clickmebuttonactionperformed(evt); } }); javax.swing.grouplayout layout = new javax.swing.grouplayout(getcontentpane()); getcontentpane().setlayout(layout); layout.sethorizontalgroup( layout.createparallelgroup(javax.swing.grouplayout.alignment.leading) .addgroup(javax.swing.grouplayout.alignment.trailing, layout.createsequentialgroup() .addcontainergap(84, short.max_value) .addcomponent(clickmebutton) .addgap(50, 50, 50) .addcomponent(labeltoset) .addgap(110, 110, 110)) ); layout.setverticalgroup( layout.createparallelgroup(javax.swing.grouplayout.alignment.leading) .addgroup(layout.createsequentialgroup() .addgap(98, 98, 98) .addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.baseline) .addcomponent(labeltoset) .addcomponent(clickmebutton)) .addcontainergap(79, short.max_value)) ); pack(); } /*code concentrated*/ private void clickmebuttonactionperformed(java.awt.event.actionevent evt) { test t = new test(); } public static void main(string args[]) { try { (javax.swing.uimanager.lookandfeelinfo info : javax.swing.uimanager.getinstalledlookandfeels()) { if ("nimbus".equals(info.getname())) { javax.swing.uimanager.setlookandfeel(info.getclassname()); break; } } } catch (classnotfoundexception ex) { java.util.logging.logger.getlogger(mainframe.class.getname()).log(java.util.logging.level.severe, null, ex); } catch (instantiationexception ex) { java.util.logging.logger.getlogger(mainframe.class.getname()).log(java.util.logging.level.severe, null, ex); } catch (illegalaccessexception ex) { java.util.logging.logger.getlogger(mainframe.class.getname()).log(java.util.logging.level.severe, null, ex); } catch (javax.swing.unsupportedlookandfeelexception ex) { java.util.logging.logger.getlogger(mainframe.class.getname()).log(java.util.logging.level.severe, null, ex); } java.awt.eventqueue.invokelater(new runnable() { public void run() { new mainframe().setvisible(true); } }); } public javax.swing.jbutton clickmebutton; public javax.swing.jlabel labeltoset; }
test.java:
public class test { test() { mainframe mf = new mainframe(); system.out.println(mf.labeltoset.gettext()); mf.labeltoset.settext("goodbye!"); } }
you changing text of labeltoset
in different instance of class mainframe
, instance never shown on screen.
if want code in constuctor of test
change text of label being shown, need pass reference mainframe
object.
change test
constructor accept reference:
public class test { test(mainframe mf) { mf.labeltoset.settext("goodbye!"); } }
and call accordingly (passing reference this
mainframe
object being shown):
private void clickmebuttonactionperformed(java.awt.event.actionevent evt) { test t = new test(this); }
Comments
Post a Comment