基于Java Swing实现的简易考试系统界面搭建
一、任务介绍
1.1 任务描述
本任务要搭建一个考试系统界面。考试题型主要有两类:判断题和单选题,题库是存放在两个二维数组中,要求考试题目能随机生成5到题目,并能通过左边的树形结构选择相应题型来改变右边面板的内容,具体运行效果如下。
1.2 运行结果
主界面
判断题
单选题
二、任务目标
-
学会分析“简易考试系统界面搭建”任务的实现思路
-
根据思路独立完成“简易考试系统界面搭建”的源代码编写、编译和运行
-
掌握Java动态生成组件的方法以及添加组件的方法
-
掌握GUI开发过程中如何处理组件上发生的界面事件
三、实现思路
- 窗口实现思路 :
设计产生随机数作为存放二维数组的下标,设置组件JLabel存放改下标中题目,设置组件JRadioButton存放选择选择项,将组件JRadioButton存放在组件ButtonGroup将选择像设置为单选。
-
阅卷取消思路
:
利用ButtonGroup类中的clearSelection清空每组选择的选项,通过已知产生五组题目,即生成一个ButtonGroup[]的组件组,该组的长度为五,通过
java Enumeration<AbstractButton> radioBtns = buttonGroup[i].getElements(); AbstractButton btn = radioBtns.nextElement();
获得每一个ButtonGroup[]中的选择项与答案进行比较。【利用产生题目的随机数组定位答案进行判断】
四、实现代码及运行结果
My.java
java
public interface My extends MouseListener, ActionListener {
public void setJButton(JButton jButton[]);
public void setJRadioButton(JRadioButton jRadioButton[]);
public void setButtonGroup(ButtonGroup Group[]);
public void setIntA(int a[]);
public void setquestion_select(String string[][]);
public void setquestion_judge(String string[][]);
void setTree(JTree jTree);
}
Police.java
```java public class Police extends MouseAdapter implements My { JButton jButton[]; JRadioButton jRadioButton[]; ButtonGroup buttonGroup[]; JTree jTree; int a[]; String[][] question_select; String[][] question_judge;
@Override
public void actionPerformed(ActionEvent e) {
double Mark = 0;
if (e.getActionCommand().equals("确定")) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) jTree.getLastSelectedPathComponent();
if (node.isLeaf()) {
String s = node.getUserObject().toString().trim();
if (s.equals("判断")) {
for (int i = 0; i < a.length; i++) {
Enumeration<AbstractButton> radioBtns = buttonGroup[i].getElements();
AbstractButton btn = radioBtns.nextElement();
System.out.println(question_select[a[i]][5]);
System.out.println(btn.getText());
if (question_select[a[i]][5].equals(btn.getText())) {
Mark += 20;
}
buttonGroup[i].clearSelection();
}
JOptionPane.showMessageDialog(null, "成绩:" + Mark, "成绩", JOptionPane.WARNING_MESSAGE);
} else {
Mark = 0;
for (int i = 0; i < a.length; i++) {
Enumeration<AbstractButton> radioBtns = buttonGroup[i].getElements();
AbstractButton btn = radioBtns.nextElement();
System.out.println(question_judge[a[i]][3]);
System.out.println(btn.getText());
if (question_judge[a[i]][3].equals(btn.getText())) {
Mark += 20;
}
buttonGroup[i].clearSelection();
}
JOptionPane.showMessageDialog(null, "成绩:" + Mark, "成绩", JOptionPane.WARNING_MESSAGE);
}
}
} else {
for (int i = 0; i < buttonGroup.length; i++) {
buttonGroup[i].clearSelection();
}
}
}
```
Masm_test.java
```java public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Masm_test window = new Masm_test();
Police police = new Police();
window.setMy(police);
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Masm_test() {
initialize();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 609, 471);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JPanel panel = new JPanel();
panel.setBounds(0, 0, 594, 419);
frame.getContentPane().add(panel);
panel.setLayout(null);
JSplitPane splitPane = new JSplitPane();
splitPane.setBounds(0, 0, 594, 409);
panel.add(splitPane);
jButton = new JButton[2];
jButton[0] = new JButton("确定");
jButton[1] = new JButton("取消");
jRadioButton = new JRadioButton[4];
group = new ButtonGroup[6];
tree = new JTree();
tree.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
if (node.isLeaf()) {
String s = node.getUserObject().toString().trim();
if (s.equals("判断")) {
show(1);
} else {
show(0);
}
}
}
});
tree.setModel(new DefaultTreeModel(new DefaultMutableTreeNode("JTree") {
{
add(new DefaultMutableTreeNode("\u5224\u65AD"));
add(new DefaultMutableTreeNode("\u5355\u9009"));
}
}));
splitPane.setLeftComponent(tree);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
splitPane.setRightComponent(scrollPane);
}
void show(int n) {
JPanel panel = new JPanel(new GridLayout(7, 1, 0, 0));
a = new int[6];
for (int i = 0; i < 6; i++) {
a[i] = (int) (Math.random() * (10));
for (int j = 0; j < i; j++) {
if (a[j] == a[i]) {
i--;
}
}
}
listener.setIntA(a);
if (n == 0) {
for (int i = 0; i < 6; i++) {
JPanel p = new JPanel(new GridLayout(3, 1, 0, 0));
lab = new JLabel(i + 1 + "、" + question_judge[a[i]][0]);
// lab.addActionListener(listener);
group[i] = new ButtonGroup();
p.add(lab);
for (int j = 0; j < 2; j++) {
jRadioButton[j] = new JRadioButton(question_judge[a[i]][j + 1]);
group[i].add(jRadioButton[j]);
p.add(jRadioButton[j]);
// jRadioButton[j].addActionListener(listener);
}
panel.add(p);
}
// scrollPane.setViewportView(panel);
}
if (n == 1) {
// JPanel panel = new JPanel(new GridLayout(6, 1, 0, 0));
for (int i = 0; i < 6; i++) {
JPanel p = new JPanel(new GridLayout(5, 1, 0, 0));
lab = new JLabel(i + 1 + "、" + question_select[a[i]][0]);
// lab.addActionListener(listener);
group[i] = new ButtonGroup();
p.add(lab);
for (int j = 0; j < jRadioButton.length; j++) {
jRadioButton[j] = new JRadioButton(question_select[a[i]][j + 1]);
group[i].add(jRadioButton[j]);
p.add(jRadioButton[j]);
// jRadioButton[j].addActionListener(listener);
}
panel.add(p);
}
}
scrollPane.setViewportView(panel);
JPanel panel_south = new JPanel();
panel_south.add(jButton[0]);
panel_south.add(jButton[1]);
panel.add(panel_south);
}
void setMy(My listener) {
this.listener = listener;
for (int i = 0; i < jButton.length; i++) {
jButton[i].addActionListener(listener);
}
listener.setButtonGroup(group);
listener.setJButton(jButton);
listener.setTree(tree);
listener.setquestion_judge(question_judge);
listener.setquestion_select(question_select);
// listener.setJRadioButton(jRadioButton);
}
```
登入首页
判断题
单选题
五、总结或感悟
通过实验三,实验四的对编写代码实现窗口,熟练掌握常用组件的常用方法的使用。本次实验结合Windowbuilder插件对组件布局很快的完成实现”出卷”;
根据实验提示选项单选的情况使用ButtonGroup存放选项radioBtns实现单选;根据提示一次出道五题想到获取每组ButtonGroup选择情况与答案进行对比实现“阅卷”。
结合三次实验,虽然在前两次实验中使用大量的时间学习如何布局,组件的使用,触发事件的过程,但是在第三次实验体现出了前两次实验的必要性;如何合理的封装程序,实现改变ButtonGroup[]的长度便改变题目的个数,以及将窗口可见的组件做成员变量,窗口不可见的做局部变量传入事件触发后的处理类(Police)中的方法。
参考文献
- 基于J2EE的学生网上考试系统的设计与实现(山东大学·雷怡然)
- 计算机基础课程web考试系统的设计与实现(内蒙古大学·王春红)
- 基于J2EE的学生网上考试系统的设计与实现(山东大学·雷怡然)
- JAVA网络考试系统的研究(江南大学·张明星)
- 计算机基础课程web考试系统的设计与实现(内蒙古大学·王春红)
- B/S结构网络在线考试系统的设计与实现(燕山大学·黄涛)
- 基于java的在线考试系统设计(华南理工大学·张晶)
- 基于J2EE的大学生体育理论考试管理系统的设计与实现(电子科技大学·陈志强)
- 基于J2EE的考试系统设计与实现(南京理工大学·樊雷)
- 分布式计算机文化基础课程在线考试系统设计与实现(北京邮电大学·李焕哲)
- 基于J2EE网上考试系统的设计与实现(电子科技大学·金虹)
- 计算机知识考试系统的设计与实现(电子科技大学·楼凤珍)
- 基于J2EE的大学生体育理论考试管理系统的设计与实现(电子科技大学·陈志强)
- 基于Web的网络考试平台的设计与实现(吉林大学·张嘉兴)
- 基于JAVA考试培训系统的设计与实现(辽宁科技大学·李青军)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码助手 ,原文地址:https://bishedaima.com/yuanma/35194.html