Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数据从文件读取到jtextfield1,并显示在jtextfield2中_Java_Swing_Jtextfield_Documentlistener - Fatal编程技术网

Java 将数据从文件读取到jtextfield1,并显示在jtextfield2中

Java 将数据从文件读取到jtextfield1,并显示在jtextfield2中,java,swing,jtextfield,documentlistener,Java,Swing,Jtextfield,Documentlistener,我正在尝试将文本文件中的数据读取到Jtextfield1并在中显示它 jtextfield2,数据从文本文件读取到jtextfield1,但不显示任何内容 jtextfield2,直到我们在jtextfield1中输入一个值。我希望数据一读入 jtextfield1它应该反映在jtextfield2中 import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JPanel; import jav

我正在尝试将文本文件中的数据读取到Jtextfield1并在中显示它 jtextfield2,数据从文本文件读取到jtextfield1,但不显示任何内容 jtextfield2,直到我们在jtextfield1中输入一个值。我希望数据一读入 jtextfield1它应该反映在jtextfield2中

 import java.awt.BorderLayout;
 import javax.swing.JFrame;
 import javax.swing.JPanel;
 import javax.swing.JTextField;
 import java.io.*;
 import java.util.*;
 import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
 import javax.swing.text.AbstractDocument;
 import javax.swing.text.AttributeSet;
 import javax.swing.text.BadLocationException;
 import javax.swing.text.Document;
 import javax.swing.text.DocumentFilter;

 public class Sh extends JFrame
 {
  public Sh()
 {
    super("SH");
    final JPanel panel = new JPanel();
    getContentPane().add(panel, BorderLayout.NORTH);

    final JTextField field = new JTextField(10);
    panel.add(field);

  try{
        InputStream ips=new FileInputStream("test.txt"); 
        InputStreamReader ipsr=new InputStreamReader(ips);
        BufferedReader br=new BufferedReader(ipsr);
        String line;
        while ((line=br.readLine())!=null){
            field.setText(line);
          }
        br.close(); 
    }       
    catch (Exception e){
        e.printStackTrace();
    }


    final JTextField field1 = new JTextField(10);
    panel.add(field1);

    final DocumentListener docListener = new DocumentListener(){

        private Document originator;

        @Override
        public void changedUpdate(DocumentEvent e) {
            updateLabel(e);
        }

        @Override
        public void insertUpdate(DocumentEvent e) {
            updateLabel(e);
        }

        @Override
        public void removeUpdate(DocumentEvent e) {
            updateLabel(e);
        }

        private void updateLabel(DocumentEvent e) {
            if (null == originator) {
                originator = e.getDocument();
                String text = "";
                try {
                    text = originator.getText(0, originator.getLength());
                } catch (final Exception ex) {
                    ex.printStackTrace();
                }

                if (!text.isEmpty()) {
                    final int p = Integer.parseInt(text);
                    if (originator.equals(field.getDocument())) {
                        final int i = (p + 1);
                        final String s = String.valueOf(i);
                        field1.setText(s);
                    } else {
                        final int i = (p - 1);
                        final String s = String.valueOf(i);
                        field.setText(s);
                    }
                } else {
                  field.setText(text);
                  field1.setText(text);
                }

                originator = null;
            }

        }
    };
    field.getDocument().addDocumentListener(docListener);
    field1.getDocument().addDocumentListener(docListener);

    final DocumentFilter docFilter = new DocumentFilter(){
        @Override
        public void insertString(FilterBypass fb, int off, String str, AttributeSet     attr)
                throws BadLocationException {
            fb.insertString(off, str.replaceAll("\\D++", ""), attr);  // remove non-digits
        }

        @Override
        public void replace(FilterBypass fb, int off, int len, String str, AttributeSet attr)
                throws BadLocationException {
            fb.replace(off, len, str.replaceAll("\\D++", ""), attr);  // remove non-digits
        }
    };
    ((AbstractDocument) field.getDocument()).setDocumentFilter(docFilter);
    ((AbstractDocument) field1.getDocument()).setDocumentFilter(docFilter);

}
public static void main(String[] args)
{
    final Sh s = new Sh();
    s.setDefaultCloseOperation(EXIT_ON_CLOSE);
    s.pack();
    s.setVisible(true);
   }
 }
文本文件:
5487

您的逻辑几乎正确。但代码中的主要问题是,在添加文档侦听器之前,您需要通过.txtfile更新textfield。您必须在更改textfield之前添加document listner,否则textfield不会侦听文档更改。您只需将settext()代码部分移到文档侦听器代码的末尾

field.getDocument().addDocumentListener(docListener);
field1.getDocument().addDocumentListener(docListener);

///////////you should change text field after adding document listner not before//////////////////
/* move textfield settext code part like that*/
try {
    InputStream ips = new FileInputStream("test.txt");
    InputStreamReader ipsr = new InputStreamReader(ips);
    BufferedReader br = new BufferedReader(ipsr);
    String line;
    while ((line = br.readLine()) != null) {
        field.setText(line);
    }
    br.close();
} catch (Exception e) {
    e.printStackTrace();
}
//////////////////////////////////////////////////////////////////////////////////////
还有另一个好办法

您可以与两个文本字段共享同一文档,因此当您更改一个文本字段时,另一个文本字段也会被更改。这样,字段中就不能有不同的文本。字段1中有文本。文本字段2中有相同的文本

field.setDocument(field1.getDocument());

你可以对两个文本字段使用相同的文档。你能给我一个更好的例子说明如何做到这一点吗。