2012-03-21 3 views
2

У меня есть три java-файла (Login.java, Sales.java), и я хочу передать переменную «Username» в другие 3 java-файла, чтобы Sales.java мог показать " Имя пользователя»Метод Getter Setter в другом java-файле

Это то, что я сделал, построить loginstaff.java:

public class LoginStaff { 
    private String Username; 
    public void LoginStaff() { 
    } 
    public void LoginStaff(String Username) { 
     this.Username = Username; 
    } 
    public String getUsername() { 
     return this.Username; 
    } 
    public void setUserame(String Username) { 
     this.Username = Username; 
    } 
} 

В Login.java enter image description here

... 
String login = tfusername.getText(); 
LoginStaff loginstaff = new LoginStaff(); 
loginstaff.setUserame(login); 
... 

В Sales.java enter image description here ... LoginStaff loginstaff = new LoginStaff(); System.out.println (loginstaff.getUsername()); ...

Проблема в том, что я не могу получить имя пользователя в Sales, оно вернулось «null». Я знаю, что это связано с новым объектом в другом классе, но я не знаю, как это исправить.

+0

вы не устанавливая имя пользователя в классе 'Sales'? – Rakesh

+0

да, я хотел бы передать строку имени пользователя из другого java-файла, возможно ли это? –

+2

Кажется, (1) вы используете разные экземпляры 'LoginStaff', второй из которых является объектом по умолчанию без полей. 1) Для лучшей помощи, скорее всего, опубликуйте [SSCCE] (http://sscce.org/). –

ответ

6

Это не вопрос того, где вы его называете - дело в том, что это два разных объекта. Это продемонстрирует ту же проблему в одном методе:

public void showProblem() { 
    LoginStaff staff1 = new LoginStaff(); 
    // Assume typo in method name is fixed 
    staff1.setUsername("foo"); 

    LoginStaff staff2 = new LoginStaff(); 
    System.out.println(staff2.getUsername()); // Prints null 
} 

Две разные объекты будут иметь два различных набора полей - это целенаправленная и хорошо. Вы не можете создать новый объект и ожидать, что он будет иметь все значения полей, заданные для другого объекта.

Похоже, что проблема в том, что вам нужен код Sales, чтобы узнать о объекте LoginStaff, созданном в вашем коде Login. Не зная больше о вашем дизайне, мы не можем сказать вам лучший способ достичь этого.

0

В Sales.java

... 
LoginStaff loginstaff = new LoginStaff(); 
loginstaff.getUsername(); 
... 

Здесь первая строка создает новый объект с инициализацией по умолчанию переменных, которая нуля в случае строки типа. Перед использованием GetUserName(), вы должны вызвать setUsername()

Или иначе создать cunstrocter в Sales.java, который принимает объект LoginStaff и после установки пользователя в Login.java , передать этот объект в Sales.java и в Sales.java вместо создания нового LoginStaff объект, хранить объект, переданный Логин.Java, а затем использовать GetUserName()

1

Если в одном классе вы сделаете это:

LoginStaff loginstaff = new LoginStaff(); 
loginstaff.setUserame(login); 

И в другом классе вы это делаете:

LoginStaff loginstaff = new LoginStaff(); 
loginstaff.getUsername(); 

Вы создаете два различных объекты. Таким образом, для второго объекта UserName никогда не устанавливался. Если вы хотите получить доступ к одному и тому же объекту, вам нужно будет ссылаться на него. Работа будет состоять в том, чтобы передать объект LoginStaff вокруг, когда объекты инициализируются. Это позволит вам получить доступ к тем же настройкам.

0

Когда вы создаете свой объект продаж, я предлагаю вам предоставить его с параметром MainClass (this). Очевидно, обновите свой конструктор продаж, чтобы отразить это. Это позволяет вам хранить идентичный MainClass в вашем классе продаж, который вы можете использовать для запроса имени или всего, что вам может понадобиться.

В основном продажи s1 = новые продажи (это);

У меня был аналогичный процесс, когда у меня был класс бара UI, но мне нужно было начать метод в основном классе, чтобы действовать, когда пользователь нажал кнопку в пользовательском интерфейсе. То, как я это делал, было классным полем в верхней части моего основного класса.

так в основном:

public class MainClass() { 
private InterfaceTab interfaceTab; 
//Instantiate the field in the constructor or main method of MainClass, so that way both classes can access each other: 
interfaceTab = new InterfaceTab(this);