当前位置: 首页 > 知识库问答 >
问题:

如何将文本文件中的正确值输入JTextField

邹弘
2023-03-14

我试图在我的项目中做一些设置。我在将文本文件中的值输入JFrame时遇到问题。更具体地说,我有一个JFrame。从这个JFrame中,我打开另一个名为设置的JFrame,其中是文本文件中带有值“123”的JTextField。当我将值更改为“123456”并点击保存按钮时,它会将文本文件重写为“123456”并处理设置JFrame。直到现在一切都很好。

当我想再次打开JFrame设置时,它用旧值"123"打开它。但是当我关闭两个JFrames并再次运行它时,JFrame中的值是正确的-"123456"...我认为当我运行第一个JFrame时,文本文件数据被加载,然后程序记住了它们,忽略了文本文件中的当前值。有什么想法吗?

package javaapplication15;

public class NewJFrame extends javax.swing.JFrame {
    Settings set = new Settings();

    public NewJFrame() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
        jButton1 = new javax.swing.JButton();
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
            .addGap(100, 100, 100)
            .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 133, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(167, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
            .addGap(93, 93, 93)
            .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(168, Short.MAX_VALUE))
        );
        pack();
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        new Settings().setVisible(true);  // TODO add your handling code here:
    }

    public static void main(String args[]) {
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(
              NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(
              NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(
              NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(
              NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    // End of variables declaration                   
}
package javaapplication15;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class Settings extends javax.swing.JFrame {
    static String text;

    public Settings() {
        initComponents();
        try {
            Scanner sc = new Scanner(new FileInputStream("settings.txt"));
            while (sc.hasNextLine()) {
                String line = sc.nextLine();
                if (line.contains("sample=")) {
                    text = line.replaceFirst("sample=", "");
                } 
            }
            sc.close();
        } catch (FileNotFoundException fnf) {
            fnf.printStackTrace();
            return;
        }
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
        jTextField1 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        jTextField1.setText(text);
        jButton1.setText("save");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
            .addGap(147, 147, 147)
            .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 167, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGroup(layout.createSequentialGroup()
            .addGap(155, 155, 155)
            .addComponent(jButton1)))
            .addContainerGap(86, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
            .addGap(95, 95, 95)
            .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(41, 41, 41)
            .addComponent(jButton1)
            .addContainerGap(113, Short.MAX_VALUE))
        );
        pack();
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        try {
            File file = new File("settings.txt");
            if (!file.exists()) {
                file.createNewFile();
            }
            FileWriter fw = new FileWriter(file, false);
            fw.write("sample=" + jTextField1.getText());
            fw.close();
        } catch (IOException ioe) {
            System.out.println("Nelze zapisovat.");
        }
        dispose();
    }                                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(
              Settings.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(
              Settings.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(
              Settings.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(
              Settings.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Settings().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration                   
}

共有1个答案

贝钧
2023-03-14

在设置类的构造函数中,您从未为jTextField1初始化过文本。

使用setText方法初始化jTextField1,如下所示:

public Settings() {
        initComponents();
        try {
            Scanner sc = new Scanner(new FileInputStream("settings.txt"));
            while (sc.hasNextLine()) {
                String line = sc.nextLine();
                if (line.contains("sample=")) {
                    text = line.replaceFirst("sample=", "");
                } 
            }
            jTextField1.setText(text);
            sc.close();
        } catch (FileNotFoundException fnf) {
            fnf.printStackTrace();
            return;
        }
    }

我明白这是你想要的,如果你在找别的东西,请告诉我。

 类似资料:
  • 我有一个表单,在这个表单中,我希望处理文本输入上的更改事件,但在按下键触发更改时做出反应(与本机JS相反,当输入字段失去焦点时触发更改事件)。 有没有反应的方法来做我想做的?

  • 我存储用户收藏夹到json文件,但我得到以下错误: 未处理的异常:类型“\u InternalLinkedHashMap” 我将以下数据添加到文件中: 代码是: 我很困惑,不知道如何解决这个问题。

  • 我在使用org.apache.commons.io.FileUtils从img目录删除文件时遇到问题。我正在使用以下代码: 实际上,该代码是用来替换img目录中已有的图像文件。我需要删除所有以前存在的文件,名称是n.*,与新文件,例如n.png。如果我试图删除图像文件,我会得到变量成功的false值,并且文件不会被删除。但不包括图像文件,例如*.abc;*.ACD;*.ACDC等被成功删除。这个问

  • 我有一个包含员工信息的文本文件。第一个单词是员工的姓氏,第二个单词是第一个名字。字符代码h或s告诉我他们是什么样的员工,有薪或小时。最后,字符代码后面的数字是小时工资(如果为小时工)或年薪(如果为受薪员工)。 我想对这些信息做的是扫描文本文件,根据识别的字符代码自动创建新的受薪员工对象或小时员工对象。 这些是小时雇员对象的参数。 这就是我想到的。 这段代码的问题是,我从in.nextDouble(

  • 问题内容: 我正在上课的作业,正在寻找一些有用的指示,而不是完整的解决方案。基本上,我必须编写一个Java程序,该程序读取一个文本文件并逐行列出信息,列出行号,最后打印出最大值和最小值以及与每个值相关的年份。文本文件包含一年和该年的温度。因此,它列出了类似“ 1900 50.9”的内容。我不是要使用数组或扫描仪,这是分配的一部分。我已经能够成功地使程序逐行打印并逐行打印出相应的温度。有人告诉我,我

  • 我之前习惯这样引入,但https://unpkg.com偶尔会出现访问不了的情况,就会导致样式出不来。于是我把这份样式文件下载下来,一些icon,图标之类的东西会显示不出来。所以大家是怎么引入的?