四则运算GUI版本

要求:用户界面新增支持 Windows GUI,同时保留原有命令行下所有功能。提示: 先测试驱动开发,然后重构代码,以GUI为目标修改"核心"函数,把与GUI/Console相关的部分提取出来
在原来实现四则运算的基础上通过java中的Swing组件实现了GUI版本
GUI的实现代码如下

public class CalMachineSwingBuild extends JFrame {

    private JPanel contentPane;
private JComboBox comboBox;
private JLabel lblNewLabel;
private JTextField textField;
private JLabel lblNewLabel_1;
private ArrayList<String> questionList=new ArrayList<String>();
private ArrayList<JTextField> answersByUser = new ArrayList<JTextField>(); //存放用户填写的答案的文本域
private ArrayList<String> RealAnswerList=new ArrayList<String>(); //存放真正的答案
private String strAnswerAndResult[]=new String[2];
private JLabel label_1;
private JLabel lblNewLabel_3;
private JButton submitButton;
private JPanel panelNorth;
private JPanel panelCenter;
private JPanel panelSouth;
private static int numOfQuestion; //问题的数量
private String itemValue; //难度级别
private String recordWrong=" ";
private String userName;
private int countWrong=0;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
CalMachineSwingBuild frame = new CalMachineSwingBuild();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
} /**
* Create the frame.
*/
public CalMachineSwingBuild() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 800, 600);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BorderLayout(0, 0));
panelNorth=new JPanel();
JLabel label = new JLabel("难度值");
label.setBounds(10, 10, 42, 15);
panelNorth.add(label);
//contentPane.add(label); comboBox = new JComboBox();
comboBox.addItem("简单");
comboBox.addItem("普通");
comboBox.addItem("复杂");
comboBox.setBounds(62, 7, 50, 100);
comboBox.setEditable(false);
comboBox.setSize(60, 20);
panelNorth.add(comboBox);
// contentPane.add(comboBox); lblNewLabel = new JLabel("题目数量");
lblNewLabel.setBounds(144, 10, 62, 15);
panelNorth.add(lblNewLabel);
// contentPane.add(lblNewLabel); textField = new JTextField();
textField.setBounds(216, 7, 46, 21);
// contentPane.add(textField);
textField.setColumns(10);
panelNorth.add(textField); JButton btnNewButton = new JButton("开始出题");
btnNewButton.setBounds(272, 6, 93, 23);
/* labelForSpec=new JLabel();
panelNorth.add(labelForSpec);*/
panelNorth.add(btnNewButton);
contentPane.add(panelNorth,BorderLayout.NORTH); panelSouth=new JPanel();
lblNewLabel_1 = new JLabel(); //用作提示
submitButton = new JButton("提交答案");//提交按钮
panelSouth.add(lblNewLabel_1);
panelSouth.add(submitButton);
contentPane.add(panelSouth,BorderLayout.SOUTH); panelCenter=new JPanel();
contentPane.add(panelCenter,BorderLayout.CENTER);
panelCenter.setLayout(new MigLayout("", "[][grow]", "[][]")); btnNewButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent event) {
repaint(); //重新展示界面
panelCenter.removeAll();
questionList.clear();
answersByUser.clear();
Pattern pattern = Pattern.compile("^+?[1-9][0-9]*$");
Matcher isNum = pattern.matcher(textField.getText());
if(!isNum.matches()){
lblNewLabel_1.setText("输入的题目数必须为整数!");
}else{
lblNewLabel_1.setText("");
itemValue=(String) comboBox.getSelectedItem();
numOfQuestion=Integer.parseInt(textField.getText());
CalMachine cm=new CalMachine();
CalculateMachine04 cm04=new CalculateMachine04();
switch(itemValue){
case "简单":
questionList=(ArrayList<String>) cm.addBracketTest(numOfQuestion); for(int i=0;i<questionList.size();i++){
JLabel questionBar = new JLabel();
panelCenter.add(questionBar, "cell 0 " + i + ",alignx trailing");
JTextField answerBar = new JTextField("", 10);
panelCenter.add(answerBar, "cell 1 " + i + " ,alignx trailing");
strAnswerAndResult=questionList.get(i).split("="); //前者为问题,后者为答案
questionBar.setText("question"+(i+1)+": "+strAnswerAndResult[0]);
RealAnswerList.add(strAnswerAndResult[1]); //存放真正的答案
answersByUser.add(answerBar);
}
break;
case "普通":
questionList=(ArrayList<String>) cm.generateSimpleQuestion(numOfQuestion);
for(int i=0;i<questionList.size();i++){
JLabel questionBar = new JLabel();
panelCenter.add(questionBar, "cell 0 " + i + ",alignx trailing");
JTextField answerBar = new JTextField("", 10);
panelCenter.add(answerBar, "cell 1 " + i + " ,alignx trailing");
strAnswerAndResult=questionList.get(i).split("="); //前者为问题,后者为答案
questionBar.setText("question"+(i+1)+": "+strAnswerAndResult[0]);
RealAnswerList.add(strAnswerAndResult[1]); //存放真正的答案
answersByUser.add(answerBar);
}
break;
case "复杂":
questionList=(ArrayList<String>) cm04.generateComplexQuestion(numOfQuestion);
for(int i=0;i<questionList.size();i++){
JLabel questionBar = new JLabel();
panelCenter.add(questionBar, "cell 0 " + i + ",alignx trailing");
JTextField answerBar = new JTextField("", 10);
panelCenter.add(answerBar, "cell 1 " + i + " ,alignx trailing");
strAnswerAndResult=questionList.get(i).split("="); //前者为问题,后者为答案
questionBar.setText("question"+(i+1)+": "+strAnswerAndResult[0]);
RealAnswerList.add(strAnswerAndResult[1]); //存放真正的答案
answersByUser.add(answerBar);
}
break;
}
System.out.println();
}
}
});
//提交判断
submitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) { for(int i=0;i<numOfQuestion;i++){
if(!answersByUser.get(i).getText().trim().equals(RealAnswerList.get(i))){
//用户答错了
recordWrong+=(i+1)+",";
countWrong++;
}
}
if(recordWrong.length()>1){
lblNewLabel_1.setText("第"+recordWrong+"题答错了!");
}else if(textField.getText().length()==0){
lblNewLabel_1.setText("请输入题数!");
} else{
lblNewLabel_1.setText("恭喜你,全都搭对了!");
} /* if(e.getSource()==submitButton){
System.out.println("点击了"+itemValue);
new CalMachineSwingBuildResult(userName,itemValue,numOfQuestion
,countWrong,numOfQuestion-countWrong).show();;
}*/ recordWrong=""; }
});
} }

运行界面如下:

四则运算GUI版本

ssh:git@git.coding.net:muziliquan/GUIVersion.git

git:git://git.coding.net/muziliquan/GUIVersion.git

上一篇:Nerd的*ATM机


下一篇:python----面对对象三大特征2