Java 将值从文件读取到JTextField,并向另一个JTextField递增1

Java 将值从文件读取到JTextField,并向另一个JTextField递增1,java,swing,jtextfield,documentlistener,documentfilter,Java,Swing,Jtextfield,Documentlistener,Documentfilter,我正在制作一个ui,其中有两个JTextFields,我可以将数据从文本文件读取到 但是数据不会更新到JTextField2,除非 在JTextField1中输入数字。请引导 这是我的密码: public class Cc extends JFrame { public Cc() { JPanel panel = new JPanel(); getContentPane().add(panel); final JTextField field = new JTe

我正在制作一个ui,其中有两个JTextFields,我可以将数据从文本文件读取到 但是数据不会更新到JTextField2,除非 在JTextField1中输入数字。请引导

这是我的密码:

 public class Cc extends JFrame 
  {
   public Cc() 
{
   JPanel panel = new JPanel();
   getContentPane().add(panel);

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

   field.getDocument().addDocumentListener(new DocumentListener() {

        @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) {
     String text = field.getText();
                    String text1 = field1.getText();

                    if (!text.isEmpty()) {
                        int p = Integer.parseInt(text);
                        int i = (p + 1);
                        String s = String.valueOf(i);
                        field1.setText(s);
                    } else {
                        field1.setText(null);
                    }

                }
    });

   ((AbstractDocument) field.getDocument()).setDocumentFilter(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
        }
    });

}
 public static void main(String[] args)
  {
  Cc c = new Cc();
  c.setDefaultCloseOperation(EXIT_ON_CLOSE);
  c.pack();
  c.setVisible(true);
  }
 }
1) 你为什么要宣布field1为最终版本?
2) 写入SwingUtilities.updateComponentTreeUI(面板);将文本设置为字段1后,这将刷新UI以反映新文本。请在字段1后尝试面板。重新绘制()。setText()

我确信仅使用DocumentFilter成功,必须设置一个文档(用于镜像)或两个JTextFields,请@mKorbel告诉我如何解决这个问题。你能帮我解决这个问题吗@mKorbel
SwingUtilities.updateComponentTreeUI(面板)
用于设置
外观
,设置
自定义UI
,也不用于APIT中实现的方法。当我以编程方式更新UI组件时,它对我有效……就像在本例中的field2,然后刷新UI以反映更改。当我以编程方式更新UI组件时,它对我有效==setText(),你不需要叫其他人