每次点击标签时我都会创建一个JTextField。我的问题是将文本放在那些创建的文本字段中。
这是我的代码:
public void mouseClicked(MouseEvent arg0) {
List<JTextField> mine = new ArrayList<JTextField>();
box = new JTextField();
name = new JTextField();
pnlPanel.add(box);
pnlpanel.add(name);
lay++;
if (lay > 0) {
box.setBounds(283, 145, 182, 27);
name.setBounds(81, 145, 182, 27);
mine.add(box);
}
GetData mydata = new GetData();
mydata.doGetData();
frame.repaint();
}
这是我获取用户输入数据的代码,但它不起作用:
public class GetData {
public void doGetData(List<JTextField> myFields) {
for (JTextField txt: myFields) {
}
}
}
如何获得用户输入?
答案 0 :(得分:0)
要获取JTextField的文本,请使用textfield.getText()
。
您可以将JTextFields保存到列表List<JTextField>
或遍历面板组件panel.getComponents()
。
你可以给每个JTextField一个像textfield.setName("id");
这样的id。
答案 1 :(得分:0)
您必须以某种方式存储字段。我更喜欢使用ArrayList,但是(正如Klemens Morbe所提到的)有很多种方法。
这是一个基本示例,输出将出现在控制台中。
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Collection;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
public class MoreAndMoreTextfields extends JFrame {
// the panel, that we will add the visible fields to
private JPanel panel = new JPanel();
// a collection of all fields, so that we can access them afterwards
private Collection<JTextField> textFields = new ArrayList<JTextField>();
public MoreAndMoreTextfields() {
// basic window layout stuff
setSize(400, 300);
setLayout(new FlowLayout());
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
setContentPane(panel);
// add label, that will create new input fields
JLabel addInputLabel = new JLabel("click for more fields");
addInputLabel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
JTextField textField = new JTextField();
panel.add(textField);
textField.setPreferredSize(new Dimension(100,20));
textFields.add(textField);
revalidate();
}
});
panel.add(addInputLabel);
// add new label, that will print out contents
JLabel outputLabel = new JLabel("click for contents");
outputLabel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Contents of fields:");
for (JTextField textField : textFields) {
System.out.println(" input:"+textField.getText());
}
}
});
panel.add(outputLabel);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MoreAndMoreTextfields().setVisible(true);
}
});
}
}