如何解决如何从Java Swing中多次使用的同一文本字段中获取文本
我正在尝试从通过代码迭代的JTextField中获取文本(显然,我不能从按钮添加其他文本字段)。这是“添加项目”按钮的作用:
addButton.addActionListener(new ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
tf = new JTextField("Name",20);
tfv = new JTextField("Value",7);
p.revalidate();
p.repaint();
p.add(tf);
p.add(tfv);
}
});
它使用FlowLayout在面板中添加两个新的文本字段。 现在,我想通过单击“确定”按钮,从文本字段中获取用户给定的文本,每个文本字段都分配给一个不同的变量,或者也许将其分配给ArrayList,但是getText()方法似乎不起作用。>
okButton.addActionListener( e -> {
String txt = tfv.getText(); //only captures the text from the last field in the panel
});
现在似乎什么也没想。
解决方法
方法getComponents()将返回p
(JPanel
)中的所有组件。
为了区分每个JTextField
,您可以通过方法setName()给每个人一个唯一的名称(并通过方法getName()
来检索名称)或使用方法{ {3}}(并通过方法getClientProperty()
检索属性)。
例如,使用setName()
为每个JTextField
设置一个唯一的名称。
private int counter = 0; // class member
addButton.addActionListener(new ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
tf = new JTextField("Name",20);
tf.setName("tf" + counter);
tfv = new JTextField("Value",7);
tfv.setName("tfv" + counter);
counter++;
p.revalidate();
p.repaint();
p.add(tf);
p.add(tfv);
}
});
如何识别每个JTextField
:
okButton.addActionListener( e -> {
Component[] cmpts = p.getComponents();
for (Component cmpt : cmpts) {
String name = cmpt.getName();
if (name.matches("^tf\\d+$") {
// Code to handle it.
}
else if (name.matches("^tfv\\d+$") {
// Handling code.
}
}
});
,
在此代码中,当您重新初始化<input type="email" value="abcdef"/><br>
<input type="email" value="someone@somesite.com"/><br>
<input type="email" value=""/><br>
<input type="email" value="someone@somesite"/>
中的tf
和tfv
时,您失去了对先前定义的文本文件的引用
addButton
因此,要解决此问题,您需要定义一个ArrayList来保存对所有已定义文本字段的引用,然后才能访问所有它们:
tf = new JTextField("Name",20);
tfv = new JTextField("Value",7);
访问
ArrayList<JTextField> arrayNames = new ArrayList<JTextField>();
ArrayList<JTextField> arrayValues = new ArrayList<JTextField>();
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
tf = new JTextField("Name",20);
tfv = new JTextField("Value",7);
p.revalidate();
p.repaint();
p.add(tf);
p.add(tfv);
arrayNames.add(tf);
arrayValues.add(tfv);
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。