Нажатие "Применить" в окне "Параметры" (дочерний элемент) должно установить переменные в окне HUD (родительский элемент), но это не так.

Задал вопрос рано, но не очень хорошо разметил мой код, и весь вопрос немного запутался, тогда, когда я изменил свой код, но у меня все еще осталась та же проблема, вопрос все еще остается, однако я решил повторно задать вопрос с моим кодом выложен гораздо аккуратнее, так что вы можете увидеть важные биты.

Вот ссылка на первоначальный вопрос:

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

В основном у меня есть множество классов. Три из которых являются:

Menu()
HUD()
Options()

Мой основной класс это Menu(), и из Menu() HUD() открывается с помощью кнопки. Меню не вызывает у меня никаких проблем, однако, HUD() и Options() есть.

Опции () открываются изнутри HUD() и в них есть 5 групп кнопок, содержащих 14 вариантов между ними. Когда пользователь выбирает каждую опцию для группы кнопок, он затем нажимает Применить, и значения (строковые значения) переключателя, выбранного для каждой группы, должны быть присвоены заданным переменным в HUD(). Однако, нажимая на Apply, он очищает все переменные, или это то, что он делает.

Кнопка "Применить" в классе 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);
}

1 ответ

Давайте рассмотрим только один метод:

public void setTime(String strTime) {
    strTime = o.getTime();
    txtTime.setText(strTime);
}

Вы вызываете это из класса Option

hud.setTime(btnTxtTime);

Но setTime игнорирует переданное вами значение и сразу же перезаписывает его o.getTime(),

Трудно судить по тому, что вы опубликовали, но вы можете быть озадачены тем, как работают вызовы методов и аргументы.

Другие вопросы по тегам