Cannot get variable from Child back to Parent in JAVA (Options Window)

感情迁移 提交于 2019-12-24 16:34:01

问题


STARTED - 3:00PM

UPDATE 1 - 5:36PM

Apply Button in the Option() class:

     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();


}  

This is a section of the Option() Class.

    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;


}

This is a method in Option() class:

    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;

}

This is how Options() is openned from within 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);
}        

This is the start of my HUD() Class:

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


private Options o;
 private HUD hud;

public HUD(Options o) {


    initComponents();
    this.o = o;

and this is the method from HUD() which gets the value of the JButtons from Options():

       public void setTime(String strTime) {

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

However whenever I click Apply, the options set in Options() are not then set in the TextFields that display them in HUD() like they should be :/


回答1:


It's difficult to navigate through your very lengthy code sample, however take a look at your cmdApplyActionPerformed() method. You are creating a new HUD() and setting values in it... and then doing absolutely nothing with it.

If you are trying to use the "Apply" button to modify an existing HUD object, your class needs to have a reference to it somewhere. If the HUD is the parent class which creates the Options, try having the Options store a reference to the parent in its constructor. Then, when you perform changes like this in the Options, you can perform them on the parent rather than on a new variable which has no effect.

private HUD parent;

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

Then, in your event handler, you can have ...

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



回答2:


From what I understand, HUD is your 'main window' and the users gets to this option frame from that window.

But when you apply, you're setting the properties on a new HUD, not the one you had before.

To fix this, you need a handle to your main window in your config window, so that you can set the properties on it.

in your hud:

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

In your config

private HUD hud;

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

then just leave out the HUD hud = new hud();



来源:https://stackoverflow.com/questions/15027696/cannot-get-variable-from-child-back-to-parent-in-java-options-window

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!