Невозможно получить переменную из дочерней в родительскую в JAVA (окно параметров)

НАЧАЛО - 3:00 вечера

ОБНОВЛЕНИЕ 1 - 5:36 вечера

Кнопка "Применить" в классе Option ():

     private void cmdApplyActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:

    hud.setTime(btnTxtTime);
    hud.setTemp(btnTxtTemp);
    hud.setSurface(btnTxtSurface);
    hud.setWeather(btnTxtWeather);
    hud.setRadiation(btnTxtRadiation);
    dispose();


}  

Это раздел класса Option ().

    public class Options extends javax.swing.JFrame {

public String btnTxtTime;
public String btnTxtTemp;
public String btnTxtSurface;
public String btnTxtWeather;
public String btnTxtRadiation;
public static boolean ApplyClicked;

/**
 * Creates new form Profile
 */

private HUD hud;

public Options(HUD hud) {
    initComponents();
    this.hud = hud;


}

Это метод в классе Option ():

    public String getTime() {

    if ("Day".equals(grpTimeOfDay.getSelection())) {
        btnTxtTime = "Day";
        return this.btnTxtTime;
    }

    if ("Night".equals(grpTimeOfDay.getSelection())) {
        btnTxtTime = "Night";
        return this.btnTxtTime;
    }
    return null;

}

Вот как Options () открывается из HUD ():

     private void cmdOptionsActionPerformed(java.awt.event.ActionEvent evt) {                                           
    // TODO add your handling code here:

   Options o = new Options(hud);
    this.getLocation(p);
    o.setLocation((int) p.getX() + 100, (int) p.getY() + 100);
    o.setVisible(true);
}        

Это начало моего HUD () класса:

    public abstract class HUD extends javax.swing.JFrame implements Runnable {


private Options o;
 private HUD hud;

public HUD(Options o) {


    initComponents();
    this.o = o;

и это метод из HUD (), который получает значение JButtons из Options ():

       public void setTime(String strTime) {

    strTime = o.getTime();
    txtTime.setText(strTime);
}

Однако всякий раз, когда я нажимаю Применить, параметры, установленные в Options (), не устанавливаются в TextFields, которые отображают их в HUD (), как должно быть:/

2 ответа

Насколько я понимаю, HUD - это ваше "главное окно", и пользователи получают доступ к этому опциональному фрейму из этого окна.

Но когда вы подаете заявку, вы устанавливаете свойства для нового HUD, а не того, который у вас был раньше.

Чтобы это исправить, вам нужен дескриптор вашего главного окна в окне конфигурации, чтобы вы могли установить свойства для него.

в твоей коже

ConfigFrame config = new ConfigFrame();
config.setHUD(this);
config.setVisible(true);

В вашем конфиге

private HUD hud;

public void setHUD(HUD hud){
   this.hud = hud;
}

тогда просто опустите HUD hud = new hud();

Трудно перемещаться по вашему очень длинному образцу кода, однако взгляните на ваш cmdApplyActionPerformed() метод. Вы создаете new HUD() и установки значений в нем... и затем ничего не делать с этим.

Если вы пытаетесь использовать кнопку "Применить", чтобы изменить существующий HUD объект, ваш класс должен иметь ссылку на него где-то. Если HUD родительский класс, который создает Optionsпопробуйте иметь Options сохранить ссылку на родителя в его конструкторе. Затем, когда вы выполняете такие изменения в OptionsВы можете выполнить их для родительской, а не для новой переменной, которая не имеет никакого эффекта.

private HUD parent;

/**
 * Creates new form Profile
 */
public Options(HUD parent) {
    initComponents();
    this.parent = parent;
}

Тогда в вашем обработчике событий вы можете иметь...

parent.setTime(btnTxtTime);
parent.setTemp(btnTxtTemp);
parent.setSurface(btnTxtSurface);
parent.setWeather(btnTxtWeather);
parent.setRadiation(btnTxtRadiation);
dispose();
Другие вопросы по тегам