Невозможно получить переменную из дочерней в родительскую в 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();