2012-02-21 2 views
2

У меня DocumentListener искать какие-либо изменения в JTextField:Постоянно читает строку из JTextField

public class MyDocumentListener implements DocumentListener { 

    static String text; 

    public void insertUpdate(DocumentEvent e) { 
     updateLog(e); 
    } 
    public void removeUpdate(DocumentEvent e) { 
     updateLog(e); 
    } 
    public void changedUpdate(DocumentEvent e) { 
     //Plain text components do not fire these events 
    } 

    public static String passText() { 
     System.out.println("string that will be passed is: "+text); 
     return text; 
    } 

    public void updateLog(DocumentEvent e) { 

     Document doc = (Document)e.getDocument(); 
     int length = e.getLength(); 

     try { 
      text = doc.getText(0, length); 
     } catch (BadLocationException e1) { 
      e1.printStackTrace(); 
     } 
     System.out.println("you typed "+text); 
    } 
} 

, а затем в другом классе:

String info = MyDocumentListener.passText(); 

Проблема в том, я 'получает только один символ, а не всю строку. Какие-либо предложения?

+0

Довольно простой;) – Hurdler

ответ

3

Вы получаете длину изменения вместо длины документа:

int length = e.getLength(); // probably 1 

должен быть

int length = doc.getLength(); 
+0

Что я могу сказать ... СПАСИБО;) – Hurdler

0

Ответ, предоставленный paislee, действительно правильный. Вы хотели бы добавить еще один способ сделать то же самое. Вы можете использовать привязки, которые добавляют концепцию ValueHolders, переменные, которые будут хранить и отражать imediatley любые изменения свойств ваших графических компонентов. Он может обеспечить очень эффективный способ реализации шаблона проектирования MVC с Swing, поскольку связь между Model-Controller-View намного более эмоциональна и развязана.

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

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