2013-02-15 2 views
0

Мне нужно задать небольшой вопрос, потому что он меня раздражает.Java - передача значений через фреймы

Как передать одну шкалу из одного кадра в другой фрейм на Java?

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

Вот код, который предполагает, чтобы вернуть текущее значение в JComboBox в виде строки в другой фрейм:

public String getUser(String user) 

{ 

user = (String)jComboBox1.getSelectedItem().toString(); 

return user; 

} 

Пути я думал, что это будет работать, это вызвать новый экземпляр этого класса в другой фрейм (имя классов - это editUser), вот что я думал, что мне нужно будет сделать.

public editPass() 

{ 

initComponents(); 

editUser name = new editUser(); 

String test = name.getUser(); 

} 

Заранее благодарим за любые советы.

ответ

0

Проблема заключается в том, что при этом: 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); 
... 
+0

Спасибо за совет, но вот следующий вопрос, как бы я создать объект с Соответствующие данные? См. Мое понимание, что я создавал объект с именем getUser, прощайте, если я ошибаюсь, но разве это не то, что я сделал? – Silentdarkness

+0

Как примечание, я использую netbeans для этого, поэтому мои кадры созданы для меня. – Silentdarkness

+0

@ user1982690: Я расширил свой ответ. – npinti

Смежные вопросы