Нажатие "Применить" в окне "Параметры" (дочерний элемент) должно установить переменные в окне 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()
,
Трудно судить по тому, что вы опубликовали, но вы можете быть озадачены тем, как работают вызовы методов и аргументы.