java - 如何在我的 Java GUI 中使用 linkedList 和多个类

标签 java user-interface linked-list

我应该如何在 GUI 程序中使用链表?该程序应该有带有文本区域和下拉菜单的 block (一个 block 是 JPanel)。 block 的数量取决于用户按下按钮的次数。应该可以将 block 放入 block 中。我想使用链接列表存储创建的信息,然后保存到文件中。我在想,对于子 block ,链表内会有链表。 我应该使用 Java.util.LinkedList 吗?我如何添加信息?节点类?应该放在单独的文件中吗?我开始尝试建立一个链接列表,但这让我很困惑。

我仍然不确定一个人应该如何制作 GUI。我只见过非常简单的 GUI。谁能告诉我应该如何安排事情?目前,我有三个文件,一个用于主 GUI 窗口,一个用于要在其中插入的问题 block ,一个用于在这两个文件中使用的一些工具,以使代码更易于理解。但是,问题 block 文件似乎有问题,因为我已经将每个 JPanel 的背景设置为白色,并且当我运行程序时,问题 block 周围有一个灰色轮廓。

我可能不应该在这里粘贴大量代码...这些是我的文件: http://asj127.webs.com/BuildAssessmentWindow.java http://asj127.webs.com/QuestionBlock.java http://asj127.webs.com/JPanelTools.java

最佳答案

我认为你应该将数据模型与 gui 分开,是的,向 ListNode1 类添加一个列表(LinkedList 或 ArrayList):

public class ListNode1 implements java.io.Serializable {
    private String num;
    private String questionText;
    private String answerText;
    private List<ListNode1> subNodes = new LinkedList<ListNode>();
...
    public List<ListNode1> getSubNodes() {
        return subNodes;
    }

    public void addSubNode(ListNode1 subNode) {
        subNodes.add(subNode);
    }

    public void removeSubNode(ListNode1 subNode) {
        subNodes.remove(subNode);
    }
}

请注意,我已使该类可序列化,以便您可以轻松地将其保存到文件或从文件中读取。

这个结构实际上是一个 n 叉树(或森林)。

在 gui 级别,使用列表是多余的,因为像 JPanel 这样的容器已经包含了它所包含的所有组件的列表,因此您可以简单地使用 JPanel 来保存所有子节点的 QuestionBlock。

我会将 QuestionBlock 链接到 ListNode1 而不是列表:

public class QuestionBlock extends JPanel {
    private JPanel container;
    private JComboBox numberDropDown, answerDropDown;
    private JTextArea question;
    private ListNode1 node;

    public QuestionBlock(ListNode1 node)
    {
        super(new FlowLayout());
        //setLocation(new Point(0, 0));
        setVisible(true);
        //setSize(800, 610);
        //setBackground(new Color(0, 0, 0));
        this.node=node;
        createGUI();
    }

    public void createGUI()
    {
        container = new JPanel();
        container.setLayout(new BorderLayout());

        numberDropDown = new JComboBox();
        numberDropDown.addItem("1.");
        numberDropDown.addItem("a.");
        container.add(panelTools.addThisComponent(numberDropDown), BorderLayout.LINE_START);

        questionsBlock = panelTools.addNewJPanel();
        questionsBlock.setLayout(new BorderLayout());

        question = new JTextArea(4, 30);
        question.setText(node.getQuestionText);
        question.setBackground(new Color(250, 250, 250)); //light gray color for noticeability
        questionsBlock.add(panelTools.addThisComponent(question), BorderLayout.PAGE_START);

        answerDropDown = new JComboBox();
        answerDropDown.addItem("--Select--");
        answerDropDown.addItem("SubQuestion");
        questionsBlock.add(panelTools.addThisComponent(answerDropDown), BorderLayout.PAGE_END);

        container.add(questionsBlock, BorderLayout.CENTER);
        add(container);
        for (ListNode1 subNode: node.getSubNodes()) {
           add(new QuestionBlock());
        }
    }
}

您还需要一种保存答案的方法:

public void saveAnswers() {
    node.setAnswerText((String)answerDropDown.getSelectedItem());
    for (Component comp: getComponents()) {
        if (comp instanceof QuestionBlock) {
            ((QuestionBlock)comp).saveAnswers();
        }
    }
}

关于java - 如何在我的 Java GUI 中使用 linkedList 和多个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2614252/

相关文章:

java - JButton 不在 GUI 中显示图标图像

java - 用于检查素数的 GUI

c++ - 链接列表 添加 CPP

c++ - Xcode : Thread 1: EXC_BAD_ACCESS (code=1, address=0x0) 制作邻接表时

java - 在不使用 JFileChooser 的情况下从 Java GUI 在默认应用程序中打开文件

c - 在不移动数组元素的情况下使用下标对数组进行排序

java - 使用 fragment 按钮打开另一个 Activity

java - Spring 集成和接收日期问题

java - 如何将 JScrollPane 与 JTabbedPane 一起使用?

java - 尝试设置一个非常简单的 Android Google map w/Cluster 但什么也没有显示