Проблема заключается в том, что при этом: editUser name = new editUser()
заключается в том, что вы создаете новый экземпляр (помимо того, что имена классов должны начинаться с верхнего регистра согласно конвенции). Это заставляет вас потерять любые данные, так как теперь вы ссылаетесь на новый объект.
Если вам необходимо получить доступ к данным из предыдущего кадра, что вам нужно будет сделать бы либо:
- Создать новый объект со всеми соответствующими данными и передать его следующему кадру ИЛИ
- Передача текущего кадра на следующий кадр. Это позволит новому кадру быть в состоянии ссылаться на предыдущий.
В качестве побочного примечания Card Layout может иметь отношение к тому, чего вы пытаетесь достичь.
EDIT: Согласно вашему комментарию вопрос: Предполагая, что вы есть editUser
кадр, скажем, мы называем это frame1
и вы заполнить все необходимые данные. Затем пользователь нажимает «Далее» или что-то подобное, из-за чего он/она переходит к следующему кадру, таким образом, frame1
будет либо больше скрыт, либо не существует, в зависимости от вашей реализации.
Назовем второй кадр frame2
. Теперь, в , вам необходимо получить доступ к данным, хранящимся в frame1
. Выполнение так: editUser name = new editUser();
вызовет frame2
для создания нового экземпляра frame1
, что означает, что вы создали новый фрейм с пустыми значениями. Вызов name.getUser()
не должен ничего давать.
Когда я упомянул , создайте объект с соответствующими данными Я имел в виду, что если вы редактируете значения пользователя, вы можете создать объект, который имел бы, например, всю информацию, которая была отредактирована. Так что это может иметь поля как userId
, originalUserName
, newUserName
и т.д.
Один пользователь нажимает Далее в вашем frame1
, вы можете создать и заполнить этот объект и использовать его для передачи данных от одного кадра к другому. В этом случае объект, который вы создавали, будет известен как объект передачи данных (DTO).
Таким образом, конструктор вашего второго кадра будет выглядеть примерно так:
public editPass(UserEditDTO userEditDTO)
{
initComponents();
String test = userEditDTO.getNewUserName(); //gets the new username the user has provided.
}
И в вашем editUser
классе, как раз перед созданием нового экземпляра editPass
, вы могли бы сделать что-то вроде этого:
...
UserEditDTO uEDTO = new UserEditDTO();
uEDTO = ... //set all the relevant fields here
new editPass(uEDTO).setVisible(true);
...
В качестве альтернативы, вы можете передать ссылку на frame1
вместо DTO. Этот подход проще. Так что ваш конструктор editPass
будет выглядеть следующим образом:
public editPass(editUser editUser)
{
initComponents();
String test = editUser.getUser();
}
С вашего editUser
кода выглядит как так:
...
new editPass(this).setVisible(true);
...
Спасибо за совет, но вот следующий вопрос, как бы я создать объект с Соответствующие данные? См. Мое понимание, что я создавал объект с именем getUser, прощайте, если я ошибаюсь, но разве это не то, что я сделал? – Silentdarkness
Как примечание, я использую netbeans для этого, поэтому мои кадры созданы для меня. – Silentdarkness
@ user1982690: Я расширил свой ответ. – npinti