Java 将元素从JTextField添加到ArrayList
因此,我有一个包含GUI的任务,其中包含:Java 将元素从JTextField添加到ArrayList,java,swing,arraylist,jtextfield,jtextarea,Java,Swing,Arraylist,Jtextfield,Jtextarea,因此,我有一个包含GUI的任务,其中包含: JTextField,允许用户在文本字段中输入内容 AddButton将输入添加到ArrayList中 ListButton在JTextArea 问题是:当我输入[1,2,3]时,输出只显示最后一个元素[3],如何解决 public class Example extends JFrame { private final int WINDOW_WIDTH = 300; private final int WINDOW_HEIGHT
,允许用户在文本字段中输入内容JTextField
将输入添加到ArrayList中AddButton
在ListButton
JTextArea
public class Example extends JFrame {
private final int WINDOW_WIDTH = 300;
private final int WINDOW_HEIGHT = 300;
private JPanel panel1, panel2;
private JLabel messageLabel;
private JTextField input;
private JTextArea output;
private JButton addButton, listButton;
String userInput;
ArrayList<String> list = new ArrayList<>();
public Example() {
setTitle("Array Exercise");
setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
panel1 = new JPanel();
panel1.setLayout(new GridLayout(6,1));
messageLabel = new JLabel("Input");
input = new JTextField(5);
addButton = new JButton("Add");
listButton = new JButton("List");
panel1.add(messageLabel);
panel1.add(input);
panel1.add(addButton);
panel1.add(listButton);
add (panel1, BorderLayout.WEST);
output = new JTextArea(12, 10);
panel2 = new JPanel();
panel2.add(output);
add(panel2, BorderLayout.EAST);
setVisible(true);
input.requestFocus();
ButtonListener bh = new ButtonListener();
addButton.addActionListener(bh);
listButton.addActionListener(bh);
}
private class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
userInput = input.getText();
if (e.getSource() == addButton) {
list.add(userInput);
output.setText(userInput + " added.");
input.setText("");
input.requestFocus();
}
else if (e.getSource() == listButton) {
list.stream().forEach(x-> output.setText(x));
}
}
}
公共类示例扩展了JFrame{
专用最终整数窗口的宽度=300;
专用最终内窗高度=300;
私人JPanel小组1、小组2;
私有JLabel消息标签;
私有JTextField输入;
私有区域输出;
私有JButton addButton、listButton;
字符串用户输入;
ArrayList=新建ArrayList();
公共示例(){
setTitle(“数组练习”);
设置尺寸(窗宽、窗高);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(新的BorderLayout());
panel1=新的JPanel();
面板1.设置布局(新网格布局(6,1));
messageLabel=新的JLabel(“输入”);
输入=新的JTextField(5);
addButton=新的JButton(“添加”);
listButton=新的JButton(“列表”);
panel1.添加(messageLabel);
面板1.添加(输入);
面板1.添加(添加按钮);
面板1.添加(列表按钮);
添加(面板1,边界布局。西部);
输出=新的JTextArea(12,10);
panel2=新的JPanel();
面板2.添加(输出);
添加(面板2,边界布局。东);
setVisible(真);
input.requestFocus();
ButtonListener bh=新ButtonListener();
addButton.addActionListener(bh);
listButton.addActionListener(bh);
}
私有类ButtonListener实现ActionListener{
@凌驾
已执行的公共无效操作(操作事件e){
userInput=input.getText();
如果(例如getSource()==addButton){
添加(用户输入);
setText(userInput+“added.”);
input.setText(“”);
input.requestFocus();
}
如果(e.getSource()==listButton){
list.stream().forEach(x->output.setText(x));
}
}
}
JTextField会将列表中每个元素的文本转换为新文本。您需要做的是如下操作:
for(String s : list){
outPut.append(s + "\n");
}
//Use "\n" if you want each string on a new line. Otherwise, skip it
(为了清晰起见,我使用了这种类型的for循环)
现在它“添加”(追加)列表中的每个新字符串。在代码中,它将文本设置为第一个字符串。将文本设置为第二个字符串(依此类推)。因此,请记住使用setText(“”)清除该区域每次您想要打印出一个新的字符串列表时,例如。JTextField会将文本转换为列表中每个元素的新文本。您需要做的是如下操作:
for(String s : list){
outPut.append(s + "\n");
}
//Use "\n" if you want each string on a new line. Otherwise, skip it
(为了清晰起见,我使用了这种类型的for循环)
现在,它“添加”(追加)列表中的每个新字符串。在代码中,它将文本设置为第一个字符串。将文本设置为第二个字符串(依此类推)。因此,请记住,每次要打印新的字符串列表时,都要用setText(“”;清除该区域。补充奥斯卡的答案:
setTest()
设置文本区域的整个文本,覆盖以前的内容。因此,最后一个值集是(唯一)将在最后保存的值集
由于已经在使用流,您可以使用:
output.setText(list.stream().collect(Collectors.joining("\n")));
补充奥斯卡的答案:
setTest()
设置文本区域的整个文本,覆盖以前的内容。因此,最后一个值集是(唯一)将在最后保存的值集
由于已经在使用流,您可以使用:
output.setText(list.stream().collect(Collectors.joining("\n")));
您应该将问题分解为多个部分。首先,您希望了解如何从GUI元素获取文本。然后,您希望分析文本以创建数组,最后,您希望仅将最后一个元素作为数组返回。是否正确?您应该将问题分解为多个部分。首先,您希望了解如何从GUI元素中获取文本。然后要分析文本以创建数组,最后要将最后一个元素作为数组返回。是否正确?