2

JTextFieldの変更を探すためのDocumentListenerがあります。

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();

問題は、文字列全体ではなく、1文字しか取得できないことです。助言がありますか?

4

2 に答える 2

3

ドキュメントの長さではなく、変更の長さを取得しています。

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

する必要があります

int length = doc.getLength();
于 2012-02-21T18:55:54.430 に答える
0

ペイズリーによって提供された答えは確かに正しいです。同じことを行うための別の方法を追加したいと思います。バインディングを使用できます。これにより、ValueHoldersの概念が追加されます。これは、グラフィカルコンポーネントのプロパティの変更を即座に格納および反映する変数です。Model-Controller-View間の通信ははるかに効果的で分離されているため、Swingを使用してMVCデザインパターンを実装するための非常に効果的な方法を提供できます。

JGoodiesには、優れたオープンソースの実装があります。いつか時間をかけてデザインを改善したい場合は、遠慮なくご覧ください。

于 2012-02-21T19:34:12.607 に答える