我应该如何在 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/