2015-05-06 3 views
2

У меня есть два разных класса, которые создают две панели A & B. B инициируется после нажатия кнопки A. A. Я хочу изменить jTextField в B, когда на кнопку нажата кнопка A .Изменить jTextField из другого класса

Код A

private final B myB = new B(); 

public static void main(String args[]) 
    { 
     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new A().setVisible(true); 
      } 
     }); 
    } 

Инициирование B

private void btnIPCStartActionPerformed(java.awt.event.ActionEvent evt) 
    {            
     // TODO add your handling code here: 
     launch.B.main(null); 
    } 

Изменение JTextField в B

private void btnBattRemoveActionPerformed(java.awt.event.ActionEvent evt)            
    {  
     **// Calling Via Variable**             
     myB.txtSystemOutput.setText("Low Battery"); // **NOT Working** 

     **// Calling Via Setter** 
     myB.setTextSystemOutput("Low Battery"); // **NOT Working** 

     **// Calling Via Direct Variable** 
     project.B.txtSystemOutput.setText("Low Battery"); // **NOT Working** 
    } 

Код B

public static void main(String args[]) 
    { 
     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       new B().setVisible(true); 
      } 
     }); 
    } 

public void setTextSystemOutput(String value) 
    { 
     txtSystemOutput.setText(value); 
    } 

ответ

3

Вы не хотите, чтобы создать B, вызвав статический основной метод как это ненужно и вредно, поскольку он изолирует визуализированный экземпляр B от вашего объекта ob т. Вместо этого создайте экземпляр B в A, создайте его в нестационарном мире, и таким образом A может вызвать переменные экземпляра на B по мере необходимости.

Меняем метод:

private void btnIPCStartActionPerformed(java.awt.event.ActionEvent evt) {            
    myB.setVisible(true); 
} 
+0

Это работало. Спасибо за ответ. Ответ @MadProgrammer тоже работает. – user3337714

3

Не используйте launch.B.main(null);, создать экземпляр B и передать ему ссылку на то, что когда-нибудь это нужно для того, чтобы сказать вам что-то должно быть обновление.

Вы должны сопротивляться искушению, чтобы B или A вносить изменения непосредственно друг с другом, так как это открывает их до большого потенциального риска и наглухо пара коды, лучше использовать Observer Pattern какое-то

Based на вашем примере, B необходимо контролировать некоторые изменения состояния в A, так B должны были бы «слушателя», чтобы A и обновлять это состояние на основе изменений, которые A объявляет

+0

Это тоже сработало. Ссылка [Observer Pattern] (http://www.oodesign.com/observer-pattern.html) была довольно проницательной. – user3337714

+0

Рад, что это может помочь – MadProgrammer

Смежные вопросы