在这个实验性质的C/S模式机考软件项目中,我所负责的那部分模块的业务代码早已完成了(回顾一下我的任务:考试系统后台数据的管理,包括考场信息的生成,试卷的生成、批改),可一直缺少界面来实现这些功能。因为在我潜意识里,用Java写界面是件非常痛苦的事情~
可能是无意中听说了新的Netbeans非常强大,我打起勇气,花了周六、周日整整两天的时间搞了一下界面……
我的环境:eclipse3.4JEE版(有hibernate插件)+NetBeans6.1。理论上只用netbeans应该够了,可我把原来eclipse下完成的业务程序完全打包成jar文件,当成库文件导入到netbeans里,让GUI代码调用——报hibernate的错,运行不起来。所以只能在netbeans里“拖”界面,在eclipse里调试。
在实际的使用后发现,netbeans的拖界面功能果然很强大,布局控件很自由,虽然和VS比还有差距,但至少不再会像eclipse的GUI插件里那样,控件位置基本不受我“控制”,完全死板地按标准布局样式来布局~
我最终的GUI效果如下面的插图。
将这个界面和我的业务代码结合起来整整花了两天半时间啊!果然非常痛苦~也怪我对swing的基础知识掌握不牢固,特别是对一些事件处理机制的理解不够深刻。比如textField控件的actionPerformed事件,在经历一段“挫折”后才发现,原来要在数据输入后按下回车键才能触发的(虽然表面上看不出有什么反应)。
个人感觉这个界面最难搞的是那两棵树了,我要求的功能是:左边的树从数据库读取数据,可以分类以树节点的方式展开,来显示数据库中的试题;右边的树显示我选取的试题,也可以分类展开;
点中间的“添加”按钮可以将左边选中的试题添加到右边的树里,点“取消”按钮可以取消添加指定的试题,点“取消全部”可以取消所有试题的添加。最折我寿的过程是将数据从左面添加到右边,总数报错(虽然最终还是搞定了)。
以下是两棵树的关键代码:
/**
* “添加”按钮的事件。
*
* @param evt
*/
private void buttonAddActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_buttonAddActionPerformed
// TODO add your handling code here:
// 获取右边树的TreeModel。
DefaultTreeModel model = (DefaultTreeModel) this.jTree2.getModel();
// 获取右边树的根节点。
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
if (leftTree != null) {
// 获取节点(当前路径的最后一个节点)。
DefaultMutableTreeNode tempNode = (DefaultMutableTreeNode) leftTree
.getLastPathComponent();
if (tempNode != null) {
// 如果是改节点是具体的题目,它必定是第三层节点,即序号为2.
if (tempNode.getLevel() == 2) {
// 获取所选题目的父节点,以便判断是哪种题型。
TreeNode parent = tempNode.getParent();
// 如果添加过来的是单选题。
if (parent.toString().equals(SINGLES_NODE)) {
SinglesDao sd = new SinglesDao();
Singles s = sd.findByNo(tempNode.toString());
// 将新添加的Singles对象加入到ArrayList:paperSingles中,用来保存所有添加的单选题。
this.paperSingles.add(s);
// 获取“单项选择题”节点
DefaultMutableTreeNode par = (DefaultMutableTreeNode) model
.getChild(root, 0);
// 将这个新节点加入右边树的“单项选择题”节点下面。
model.insertNodeInto(tempNode, par, model
.getChildCount(par));
} else if (parent.toString().equals(MULTIS_NODE)) {
MultisDao md = new MultisDao();
Multis m = md.findByNo(tempNode.toString());
this.paperMultis.add(m);
DefaultMutableTreeNode par = (DefaultMutableTreeNode) model
.getChild(root, 1);
model.insertNodeInto(tempNode, par, model
.getChildCount(par));
} else if (parent.toString().equals(JUDGES_NODE)) {
JudgesDao jd = new JudgesDao();
Judges j = jd.findByNo(tempNode.toString());
this.paperJudges.add(j);
DefaultMutableTreeNode par = (DefaultMutableTreeNode) model
.getChild(root, 2);
model.insertNodeInto(tempNode, par, model
.getChildCount(par));
} else if (parent.toString().equals(QUESTIONS_NODE)) {
QuestionsDao qd = new QuestionsDao();
Questions q = qd.findByNo(tempNode.toString());
this.paperQuestions.add(q);
DefaultMutableTreeNode par = (DefaultMutableTreeNode) model
.getChild(root, 3);
model.insertNodeInto(tempNode, par, model
.getChildCount(par));
}
}
}
}
this.leftTrees = null;
}// GEN-LAST:event_buttonAddActionPerformed
/**
* 处理左边树的节点选中事件。
*
* @param evt
*/
private void jTree1ValueChanged(javax.swing.event.TreeSelectionEvent evt) {// GEN-FIRST:event_jTree1ValueChanged
// TODO add your handling code here:
// 获取最新的一个选中路径。
TreePath tp = evt.getNewLeadSelectionPath();
this.leftTree = tp;
if (tp != null) {
// 获取节点(当前路径的最后一个节点)。
DefaultMutableTreeNode tempNode = (DefaultMutableTreeNode) tp
.getLastPathComponent();
// 如果选择的是根节点,文本框显示“请选择具体题型!”。
if (tempNode.getLevel() == 0) {
this.areaTitle.setText("请选择具体题型!");
} // 如果选择的是分类节点,文本框显示"请选择具体题目!"。
else if (tempNode.getLevel() == 1) {
this.areaTitle.setText("请选择具体题目!");
} // 否则显示具体的题目。
else {
// title 保存题目内容。
String title = new String();
// 获取所选题目的父节点,以便判断是哪种题型。
TreeNode parent = tempNode.getParent();
// 如果是“单项选择题”的子节点:
if (parent.toString().equals(SINGLES_NODE)) {
// 从数据库中获取指定编号的这道单选题(Singles为单选题的持久化类)。
SinglesDao sd = new SinglesDao();
Singles s = sd.findByNo(tempNode.toString());
// 将题目的标题传给title。
title = s.getTitle();
}// 如果是“多项选择题”的子节点:
else if (parent.toString().equals(MULTIS_NODE)) {
MultisDao md = new MultisDao();
Multis m = md.findByNo(tempNode.toString());
title = m.getTitle();
}// 如果是“判断题”的子节点:
else if (parent.toString().equals(JUDGES_NODE)) {
JudgesDao jd = new JudgesDao();
Judges j = jd.findByNo(tempNode.toString());
title = j.getTitle();
}// 如果是“问答题”的子节点:
else if (parent.toString().equals(QUESTIONS_NODE)) {
QuestionsDao qd = new QuestionsDao();
Questions q = qd.findByNo(tempNode.toString());
title = q.getTitle();
}
// 在文本框中显示相应的内容。
this.areaTitle.setText("" + tempNode + ":" + title);
}
}
}// GEN-LAST:event_jTree1ValueChanged
private void jTree2ValueChanged(javax.swing.event.TreeSelectionEvent evt) {// GEN-FIRST:event_jTree2ValueChanged
// TODO add your handling code here:
this.rightTree = evt.getNewLeadSelectionPath();
}// GEN-LAST:event_jTree2ValueChanged
- 大小: 194.2 KB
- 大小: 193.7 KB
分享到:
相关推荐
NCRE出品上机考试软件
计算机二级C语言上机考试软件是一款专为准备国家计算机等级考试二级C语言科目设计的模拟测试平台。这个软件旨在帮助考生熟悉考试环境,提高在实际考试中的编程和问题解决能力。下面将详细介绍这款软件及其相关知识点...
全国计算机等级考试二级Visual Basic上机考试模拟软件,内含最新考试试题
三、多种训练方式:本软件提供笔试、上机考试,每种考场均提供固定抽题、随机抽题、重复抽题、恢复考场四种方式。 四、人性化设计:为入门级考生设计了一些辅助功能,如考生可在考试时边看、边答、边记、边学习、在...
这款“计算机二级C语言考试笔试+上机考试软件”正是为了帮助考生备考而设计的工具,它包含了丰富的学习资源和模拟测试功能。 在C语言的学习中,首先需要理解C语言的基础概念,例如变量、常量、数据类型(如int、...
上机考试部分是整个考试的重要环节,考生需要在规定时间内完成编程、故障排查、数据分析等实际操作任务。在这个过程中,一套合适的上机软件显得至关重要。 "计算机二级考试上机软件"通常包含了一系列为了模拟考试...
正版软件
"二级Java上机南开模拟软件"进一步明确了软件的来源和针对性,表明这是专门为国家二级Java上机考试设计的,与南开大学有关。"二级Java模拟软件"则概括了软件的整体性质,即提供Java编程的模拟测试。 【压缩包子文件...
在“等级考试只有一套试题”的描述中,我们可以推断这款模拟软件可能包含了一整套综合性的Java上机考试题目。这样的设计虽然简洁,但能够确保考生全面复习和掌握所有可能出现在真实考试中的重要知识点。这一体系化的...
[全国计算机等级考试上机考试新版题库:二级Visual Basic(新教程版)]_刘石南主编_电子科技大学出版社_2017.05 完整清晰扫描版,已添加完美书签。 本资源为PDF,解压后体积为125M。
上机考试系统与VC6.0是用于计算机二级C语言考试的重要工具,它们结合使用能够帮助用户模拟真实的考试环境,进行有效的练习和测试。在这个压缩包中,包含了三个主要文件,分别是“西西软件园.txt”、“西西软件.url”...
全国计算机等级考试上机考试题库——二级C语言,该软件可以帮助你提前适应上级环境。
全国计算机等级考试C语言上机软件是为了帮助考生进行模拟练习和熟悉考试环境而设计的专用工具。这款软件通常会包含一个集成开发环境(IDE),如这里提到的VC++6.0,它是Visual C++的一个经典版本,特别适合初学者...
南开百题全国计算机等级考试上机考试模拟软件二级c语言
全国计算机等级考试二级C上机模拟软件内含一百套上机模拟试题,二级C上机考试必备!!!
NCRE上机考试软件培训笔试卷,这对NCRE考试来说。是一份很有用的资料。
全国计算机等级考试历年真题必练二级ACCESS上机模拟软件
二级C语言上机考试模拟软件 模拟机考系统 有模拟题~
在【北大上机考试】中,这个主题尤其关键,因为这涉及到实际操作和应用软件工程原则解决具体问题的能力。 1. **需求分析**:这是软件工程的起点,涉及到明确和理解用户需求,制定出详细的功能和性能要求。在上机...
【标题】"二级 Visual Basic 上机考试模拟系统"是一个针对全国等级考试的备考工具,它专为准备参加VB二级上机考试的考生设计。这个系统旨在帮助考生熟悉考试环境,提高他们的编程技能和应试能力。 【描述】提到的...