我jPanel1
和jTextField1
以及addTfButton
。 addTfButton
将动态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
?
答案 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对象。但我还没有看到整个代码。