java - Changing the JLabel text from another class doesn't work -


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