所以我有一个包含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));
}
}
}
答案 0 :(得分:4)
JTextField将其文本添加到列表中每个元素的新文本。你需要做的就是这样:
for(String s : list){
outPut.append(s + "\n");
}
//Use "\n" if you want each string on a new line. Otherwise, skip it
(为了清晰起见,我使用了这种类型的for循环)
现在它&#34;添加&#34; (追加)列表中的每个新String。在您的代码中,它将文本设置为第一个String。将文本设置为第二个String(依此类推)。因此,每次要打印出来时,请记住用 setText(&#34;&#34;); 清除该区域,例如,新的字符串列表
答案 1 :(得分:1)
补充奥斯卡的回答:
setTest()
设置文本区域的整个文本,覆盖以前的内容。所以最后一个值集是(唯一的)将在最后保存的值。
由于已经使用Streams,您可以使用:
output.setText(list.stream().collect(Collectors.joining("\n")));