将文本文件值分配给动态创建的jTextFields

时间:2016-04-20 17:17:32

标签: java swing

jPanel1jTextField1以及addTfButtonaddTfButton将动态tf添加到jPanel2。 使用此代码,我想将文本文件数据加载到jTextField1并动态创建tf

private void loadButtonActionPerformed(java.awt.event.ActionEvent evt) {   
    try {
          BufferedReader br = new BufferedReader(new FileReader ("file.txt"));
          String str=null;

          while( (str = br.readLine()) !=null ) {
              String[] s = str.split(":");                   
              jTextField2.setText(s[2]);

              for (int i = 0; i < jPanel2.getComponentCount(); i++) {
                  SubPanel panel = (SubPanel) jPanel2.getComponent(i);
                    JTextField tf = panel.getTf();
                    tf.setText(s[2]);
                    System.out.println(s[2]);
              }
           }
     }

Mu SubPanel类:

private class SubPanel extends javax.swing.JPanel {        
        SubPanel me;
        JTextField tf = new JTextField();        
    public SubPanel() {
            super();
            me = this;                      
            me.setLayout(new javax.swing.BoxLayout(me, javax.swing.BoxLayout.LINE_AXIS));          
            tf.setFont(new java.awt.Font("Arial", 0, 16));
            me.add(tf);          
    } 

    public JTextField getTf(){
            return tf;
    }
}

file.txt的内容:

Name:1:a
Name:2:b
Name:3:c

要动态jTextfields我想加载值b, c。 但是,上面的代码动态添加tf只读取结束行的s[2],即c

a //jTextField2
c //dynamically created tf[1]
c //dynamically created tf[2]

我想问一下如何将s[2]值分配给动态创建的jTextFields

2 个答案:

答案 0 :(得分:1)

如果你想设置你单独阅读的每个值,那么你必须从for循环中取出for循环。

BufferedReader br = new BufferedReader(new FileReader ("file.txt"));
String str=null;
// I set the counter to zero
int i = 0;
while( (str = br.readLine()) !=null ) {

    String[] s = str.split(":");                   
    jTextField2.setText(s[2]);

    SubPanel panel = (SubPanel) jPanel2.getComponent(i);
    JTextField tf = panel.getTf();
    tf.setText(s[2]);
    System.out.println(s[2]);
    // for each new line we take the next SubPanel
    i++;
}

这样您就可以在单独的SubPanel中设置您读取的每个值。首先尝试一下,然后我们可以从那里开始。

<强>更新

根据您的说法,您希望保存jTexField2实例中的第一个值以及每个tf的{​​{1}}个实例中的其余值。然后我的解决方案如下:

SubPanel

答案 1 :(得分:0)

看起来第二个和第三个SubPanel包含相同的JTextField对象。但我还没有看到整个代码。