java - 将列表添加到另一个列表

标签 java list arraylist

首先,我需要将用户给出的号码添加到名为numberlist的列表中。然后最后将其添加到名为 listCollection 的列表列表中。之后我需要显示 listCollection 的输出 例如,假设用户首先将数字 2,3,4 添加到列表中,然后单击添加列表集合,然后再次输入数字 5,6,7,8 并单击添加到列出集合。我想要显示的输出是

Collection1 : 2,3,4
Collection2 : 3,4,5

假设我想要 listCollection 的索引 0 中的 2,3,4 和 listCollection 的索引 1 中的 5,6,7 .
这是我的代码:

import java.awt.FlowLayout;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;

import javax.swing.JTextField;

/**
 *
 * @author sudip
 */
public class JavaApplication1 extends JFrame implements ActionListener {
    private JTextField txtNotation;
    private JButton btAddlist, btAddNumber, btOutput;
    private List<List<Integer>> listCollection;
    private History history;

    public JavaApplication1() {
        initComponents();
        listCollection = new ArrayList<List<Integer>>();
    }

    public void initComponents() {
        setSize(400, 500);
        setLayout(new FlowLayout(3, 3, 3));
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        txtNotation = new JTextField("2");
        txtNotation.setColumns(20);
        txtNotation.setSize(20, 40);
        btAddNumber = new JButton("Add Number");
        btAddlist = new JButton("Add List to Collection");
        btOutput = new JButton("Get");
        getContentPane().add(txtNotation);
        getContentPane().add(btAddNumber);
        getContentPane().add(btAddlist);
        getContentPane().add(btOutput);
        btAddlist.addActionListener(this);
        btAddNumber.addActionListener(this);
        btOutput.addActionListener(this);
    }

    public static void main(String[] args) {
        new JavaApplication1().setVisible(true);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        JButton source = (JButton) e.getSource();
        List<Integer> numberlist = new ArrayList<>();
        int a = Integer.parseInt(txtNotation.getText());

        if (source.equals(btAddNumber)) {
            System.out.println("Number was added to list");
            numberlist.add(a);
        } else if (source.equals(btOutput)) {
            displayOutput();
        } else if (source.equals(btAddlist)) {
            System.out.println("Number of list was added to ListCollection");
            numberlist.clear();
            listCollection.add(numberlist);
        }

    }

    public void displayOutput() {
        for (int i = 0; i < listCollection.size(); i++) {
            System.out.println("Collection: " + i+1);
            for (int j = 0; j < listCollection.get(i).size(); j++) {
                System.out.print(listCollection.get(i).get(j) + ", ");
            }
        }
    }

}

最佳答案

您的问题在于您的actionPerformed逻辑,您可以在其中重新实例化一个新的 numberList每一次。当事件源为btAddList时,您的列表将始终为空,因为它刚刚被重新创建。由 btAddNumber 添加的号码按钮永远不会被持久化,修改后numberListactionPerfomed 范围之后丢失方法已退出。

正如评论中所说,您应该致力于将 GUI 与逻辑分开,这将有助于避免此类错误。

关于java - 将列表添加到另一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39851841/

相关文章:

java - 构造函数和零参数构造函数的区别(Java)

python - 根据 STR 中的条件插入 ',' - Python

python - 基于键的两个字典列表的交集

android - 如何将图像传递到 Android 中的 ArrayList<String>?

java - 使用 lingpipe 进行增量语言模型训练

java - 从整数到二进制的转换

java - JPA/Hibernate order by of a Joda time of the day 在香港无法正常工作

python - 转换列表,无需替换模式

java - ArrayIndexOutOfBoundsException :-1

java - 从 Eclipse 项目中的文件夹中读取文件名