2013-09-15 3 views
-1

Пожалуйста, помогите мне. У меня есть проблемы в следующем коде. Это немного сбивает меня с толку, но легко для вас. Надеюсь, вы найдете решение для этого.Форма Объект, созданный в одном классе и получающий его ссылку/ссылку в другом классе

class AddressBookInterface { 
     JTextField txt = new JTextField(); 
    } 
    class AddressBook { 
     AddressBookInterface obj; 
     String input = obj.txt.getName();  //this code, generate an error.......... 

    } 

В классе «AddressBookInterface» я создал текстовое поле. и в классе «AddressBook» я хочу получить некоторый ввод от пользователя, который пользователь вводит в текстовое поле, созданное в классе «AddressBookInterface».

+0

что ошибка .. 1) GetName() возвращает имя компонента 2) ваш класс интерфейса является класс, а не интерфейс путает 3), чтобы получить информацию от пользователя, вы должны использовать некоторые eventListener, затем с 'getText()' вы получаете вход. – nachokk

+0

где ваш основной метод. добавьте основной метод в свой класс AddressBook и получите текст или имя, которое вы хотите в нем. – Ranjit

ответ

0

obj null, вам необходимо его инициализировать. В противном случае вы получите NullPointerException

class AddressBook { 
    AddressBookInterface obj = new AddressBookInterface(); 
    String input = obj.txt.getName();  
} 

Sidenote:

ИМО, вы должны сделать инициализацию в блоке, например, что-то вроде этого

class AddressBook { 
    AddressBookInterface obj; 
    String input;  

    { 
     obj = new AddressBookInterface(); 
     input = obj.txt.getName();  
    } 

} 
0

проблемы проста. AddressBookInterface obj не инстантируется, значит, внутри obj нет ничего, попросите пустой объект дать вам значение имени и, конечно, произошла ошибка. В этом случае попробуйте следующий код.

public class AddressBookInterface{ 
    JTextField txt; 
    public AddressBookInterface(){ 
     // constructor 
     // do something initial task here 
     txt = new JTextField(); 
    } 

    // Create this method so that you can reference from other class 
    public String getName(){ 
     return txt.getText(); 
    }  
} 

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

// initial the interface 
    AddressBookInterface interfaceObj = new AddressBookInterface(); 

    // get the value 
    String name = interfaceObj.getName(); 

У меня нет опыта проектирования MVC. Надеюсь, это то, что вы ищете.

+0

На самом деле, я новичок в Java. Я хочу закодировать адресную книгу с помощью модели MVC. В которой я создаю класс только для интерфейса, один класс для этой реализации (бизнес-логический уровень), который реализует слушателей. Я знаю, что это может быть глупая идея. bcoz У меня нет полной команды на MVC. –

+0

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

0

Чтобы получить пользовательский ввод, вы должны использовать getText(), а не getName(). Чтобы получить пользовательский ввод, вы можете принять подход от шаблона наблюдателя.

в AddressBook создать наблюдателя для прослушивания изменений с текстового поля в AddressBookInterface.

Тогда ваш код будет выглядеть следующим образом.

class AddressBookInterface { 
     JTextField txt = new JTextField(); 

    public void registerListener(String name, PropertyCHangeListener listener){ 
      txt.addPropertyChangeListener(name,listener); 
    }  

} 

    class AddressBook { 
     String input; 
     private PropertyChangeListener listener = new MyPropertyChangeListener(); 


     public PropertyChangeListener getListener(){ 
      return listener; 
     } 

     private class MyPropertyChangeListener implements PropertyChangeListener{ 
      @Override 
      public void propertyChange(PropertyChangeEvent evt){ 
         if(evt == null) 
          return; 

        if(evt.getPropertyName().equals("text")){ 
         input = (String) evt.getNewValue(); 
        } 
      } 

     } 

} 

И в каком месте, где вы создаете объекты.

AddresBookInterface addres = new AddresBookInterface(); 
    AddresBook book = new AddresBook(); 
    addres.registerListener("text",book.getListener()); 
Смежные вопросы