Java 将元素从JTextField添加到ArrayList

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

因此,我有一个包含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 = 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元素中获取文本。然后要分析文本以创建数组,最后要将最后一个元素作为数组返回。是否正确?