0

JTextFieldを作成し、PlainDocumentの拡張クラスを使用してsetDocumentプロパティを設定しました。

テキストボックスから消去するときに、残っている文字列を印刷したいのですが、1ステップ前に印刷されます。

まあ言ってみれば。JTextFieldに123456789のような文字列があり、バックスペースで1文字を消去すると、ok(12345678)と出力されます。しかし、削除すると「3」とすると「1234567」と表示されます。したがって、前の値を印刷します。次に別の文字を削除すると、3が消去されたことが示されます。。長さが変更されたことを認識し、後ろに1文字少ない文字を出力することだけです。

私が自分自身を明確にしなかった場合。plainDocumentコードから削除するときにテキストフィールドが持つ「実際の」文字列を出力したいと思います。

削除すると、テキストが印刷されるときにremoveまたはremoveupdateメソッドがトリガーされます。(おそらく1ステップ早く印刷します)

PS:外部のjtextfieldからではなく、plaindocumentから値を取得する必要があります。

これは私のコードです

protected void removeUpdate(AbstractDocument.DefaultDocumentEvent evento)
 {                      
        try {               
            super.removeUpdate(evento);
            removePostUpdate(evento);

        } catch (BadLocationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

 }

protected void removePostUpdate(AbstractDocument.DefaultDocumentEvent evento) throws BadLocationException
 {       
     try {              
            palabraCompleta = evento.getDocument().getDefaultRootElement().getDocument().getText(0,evento.getDocument().getDefaultRootElement().getDocument().getLength()-1 );                              
            System.out.println(evento.getPresentationName());               
        } catch (BadLocationException e) {          
            e.printStackTrace();
        }
        System.out.println(palabraCompleta);
 }
4

1 に答える 1

3

デフォルトのドキュメントを使用して、JTextFieldで行ったことを複製しました。

まず第一に、あなたのコードにはバグがあります-あなたは長さの代わりに長さ-1を使用しています。また、私には間違っているように見えるDocument.getDefaultRootElement()。getDocument()が必要かどうかもわかりません。

とにかく、以下で作成したテストコードは問題なく実行されます。あなたが投稿したコードで私が見つけたバグを考えると、あなたがここに投稿していないあなたがカスタマイズしたものに実際に問題がある場合、私は言うでしょう。


    public static void testDocument () {
        final JTextField tf = new JTextField();
        tf.getDocument().addDocumentListener(new DocumentListener() {

            @Override
            public void changedUpdate(DocumentEvent arg0) {
                System.out.println(tf.getText());
                try {
                    System.out.println("printing: " + arg0.getDocument().getDefaultRootElement().getDocument().getText(0,arg0.getDocument().getDefaultRootElement().getDocument().getLength()));
                } catch (BadLocationException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            @Override
            public void insertUpdate(DocumentEvent arg0) {
                System.out.println(tf.getText());               
                try {
                    System.out.println("printing: " + arg0.getDocument().getDefaultRootElement().getDocument().getText(0,arg0.getDocument().getDefaultRootElement().getDocument().getLength()));
                } catch (BadLocationException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            @Override
            public void removeUpdate(DocumentEvent arg0) {
                System.out.println(tf.getText());               
                try {
                    System.out.println("doc: " + arg0.getDocument().getDefaultRootElement().getDocument().getText(0,arg0.getDocument().getDefaultRootElement().getDocument().getLength()));
                } catch (BadLocationException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        });
        WindowUtilities.visualize(tf);
    }
于 2012-05-07T15:19:11.447 に答える