2011-12-05 9 views
9

Tak więc, jak być może wiesz, jeśli masz pole tekstowe i dodasz do niego ActionListener, usłyszysz tylko naciśnięcie przycisku Enter. Jednak chcę, aby mój ActionListener słuchał zmian w tekście. Więc w zasadzie mam to:Niech ActionListener nasłuchuje zmiany w JTextField zamiast tylko wprowadzać?

public static JPanel mainPanel() { 
    JPanel mainp = new JPanel(); 
    JTextArea areap = new JTextArea("Some text in the textarea"); 
    JTextField fieldp = new JTextField("Edit this"); 
    areap.setEditable(false); 
    fieldp.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      // TODO Auto-generated method stub 
      if(//change in textfield, for instance a letterpress or space bar) 
        { 
         //Do this 
        } 
     } 
    }); 
    mainp.add(areap); 
    mainp.add(fieldp); 
    return mainp; 
} 

Każdy sposób mogę słuchać zmian w tekście (jak w przypadku udokumentowanych actionPerformed)?

+1

możliwe duplikat.! [huśtawka: odpowiedni detektor zdarzeń zmian JTextField] (http://stackoverflow.com/ que stions/2165071/swing-proper-listener-for-jtextfield-change-events) – duffymo

Odpowiedz

21

Od odpowiedzi przez @JRL


Użyj podstawowy dokument:

myTextField.getDocument().addDocumentListener(); 
+1

Co z PropertyChangeEvent? – joshreesjones

2

Tak, ale co to jest słuchacz dokument i jak go używać? Naprawdę nie odpowiadasz na pytanie.

Mam JTextField w interfejsie użytkownika mojej aplikacji. Kiedy użytkownik wprowadzi w nim jakąkolwiek zmianę, chcę sprawdzić pobliskie JCheckBox. Celem jest nakłonienie aplikacji do USE wprowadzenia wprowadzonej wartości. Użytkownicy często wprowadzają tam wartość, ale jeśli nie mówią wprost aplikacji, aby z niej skorzystać, aplikacja nadal je ignoruje. Zamiast "trenować" użytkowników powinienem przestrzegać zasady najmniejszego zdziwienia i automatycznie sprawdzać pole "Użyj tej wartości".

Ale jak mogę posłuchać zmiany? Czy nie możecie po prostu powiedzieć mi łatwej drogi, zamiast "edukować mnie" o słuchaczach dokumentów?

+0

Kiedy zadałem to pytanie, sugerowałem, że wiem, jak działa ActionListener, dlatego też powinienem wiedzieć, jak (aby dowiedzieć się jak działa) narzędzie DocumentListener. Odpowiedź była więcej niż wystarczająca. Dodajesz DocumentListener do dokumentu JTextField, jak wspomniano, i możesz sprawdzić Javadocs API dla jakiej funkcji ma dany słuchacz. – ZimZim

+0

może możesz uzyskać pomysł z tego http://www.coderanch.com/t/610054/GUI/java/Add-DocumentListener-validate-multiple-JTextFields –

0

Dokumenty to mechanizmy używane przez java swing do przechowywania tekstu wewnątrz JTextField. DocumentListeners są obiektami implementującymi interfejs DocumentListener, dzięki czemu można wyświetlać zmiany w dokumencie, tj. Zmiany w tekście JTextField.

Aby korzystać z funkcji dokumentu i funkcji tworzenia list dokumentów, zgodnie z powyższymi sugestiami, rozszerz swoją klasę (prawdopodobnie, ale niekoniecznie JFrame), tak aby implementowała interfejs DocumentListener. Zaimplementuj wszystkie metody interfejsu (najprawdopodobniej twój java ja może to zrobić półautomatycznie dla ciebie.FYI, interfejs DocumentListener ma trzy metody, jedną do wstawiania znaków (do pola tekstowego), jedną do usuwania znaków i jedną do Zmieniając atrybuty, będziesz chciał zaimplementować pierwsze dwa, ponieważ są one wywoływane, gdy są dodawane (pierwsze) lub usunięte (drugie). Aby uzyskać zmieniony tekst, możesz poprosić dokument o tekst, lub prościej zadzwonić myTextField.getText()

C'est tout

Phil Troy

+0

Zobacz najpierw: [odpowiadanie] (https: // stackoverflow.com/help/answering) i [jak-odpowiedź] (https://stackoverflow.com/help/how-to-answer) –