EBU4201 Introductory Java Programming 2022/23

Task 1 [30 marks]
SumItUp is a simple application for children where they can practise their counting and adding
skills (see Figure 1).
在这里插入图片描述
实现截图
在这里插入图片描述
代码:
Main.java

import javax.swing.*;

public class Main {
    public static int MaxNumber = 10;
    public static void main(String[] args) {
        if(args.length == 0) {
            System.out.println("No command line argument is given!");
            return;
        }else{
            MaxNumber = Integer.parseInt(args[0]);
            if(MaxNumber < 1 || MaxNumber > 20){
                System.out.println("A number outside the valid range is given!");
            }
        }

        JFrame frame = new JFrame("Welcome to SumItUp!");
        frame.setSize(800, 600);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        MyPanel myPanel = new MyPanel();
        frame.add(myPanel);
        frame.setVisible(true);
    }



}

CheckListener.java

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class CheckListener implements ActionListener {
    private MyPanel myPanel;

    @Override
    public void actionPerformed(ActionEvent e) {

        AdditionQuiz additionQuiz = myPanel.getAdditionQuiz();

        int number1 = (int) myPanel.getNumberSpinner1().getValue();
        int number2 = (int) myPanel.getNumberSpinner2().getValue();
        int number3 = (int) myPanel.getNumberSpinner3().getValue();

        // right answer
        if(number1 == additionQuiz.getNumber1() && number2 == additionQuiz.getNumber2() && number3 == additionQuiz.getAnswer()){
            myPanel.getLabel().setText("Correct! Have another go?");
            additionQuiz.generateQuiz();
            myPanel.removeAll();
            myPanel.getLeftPanel().removeAll();
            myPanel.paintLeftPanel();
            myPanel.getRightPanel().removeAll();
            myPanel.paintRightPanel();
            myPanel.getNumberSpinner1().setValue(1);
            myPanel.getNumberSpinner2().setValue(1);
            myPanel.getNumberSpinner3().setValue(1);

        }else{
            myPanel.getLabel().setText("Wrong! Try again!");
        }

    }

    public void setMyPanel(MyPanel myPanel) {
        this.myPanel = myPanel;
    }


}

MyPanel.java

import javax.swing.*;
import java.awt.*;


public class MyPanel extends JPanel{
    private final JLabel label;

    private final AdditionQuiz additionQuiz;
    private JSpinner NumberSpinner1, NumberSpinner2, NumberSpinner3;

    private JPanel leftPanel, rightPanel;

    FlowLayout flowLayout;

    ImageIcon rabbitIcon;

    public MyPanel(){
        String beginText = "Enter two operands, results and click on 'Check!'";
        label = new JLabel(beginText);
        BorderLayout borderLayout = new BorderLayout();
        setLayout(borderLayout);
        label.setHorizontalAlignment(JLabel.CENTER);
        add(label, BorderLayout.NORTH);

        JPanel quizPanel = new JPanel();

        JButton checkButton = new JButton("Check!");
        CheckListener checkListener = new CheckListener();
        checkButton.addActionListener(checkListener);
        checkListener.setMyPanel(this);
        SpinnerNumberModel model1 = new SpinnerNumberModel(1, 1, Main.MaxNumber, 1);
        SpinnerNumberModel model2 = new SpinnerNumberModel(1, 1, Main.MaxNumber, 1);
        SpinnerNumberModel model3 = new SpinnerNumberModel(1, 1, Main.MaxNumber * 2, 1);

        NumberSpinner1 = new JSpinner(model1);
        JFormattedTextField firstNumberField1 = ((JSpinner.DefaultEditor) NumberSpinner1.getEditor()).getTextField();
        firstNumberField1.setEditable(false);

        NumberSpinner2 = new JSpinner(model2);
        JFormattedTextField firstNumberField2 = ((JSpinner.DefaultEditor) NumberSpinner2.getEditor()).getTextField();
        firstNumberField2.setEditable(false);

        NumberSpinner3 = new JSpinner(model3);
        JFormattedTextField firstNumberField3 = ((JSpinner.DefaultEditor) NumberSpinner3.getEditor()).getTextField();
        firstNumberField3.setEditable(false);


        quizPanel.add(NumberSpinner1);
        quizPanel.add(new JLabel(" + "));
        quizPanel.add(NumberSpinner2);
        quizPanel.add(new JLabel(" = "));
        quizPanel.add(NumberSpinner3);
        quizPanel.add(new JLabel("  "));
        quizPanel.add(checkButton);
        add(quizPanel, BorderLayout.SOUTH);

        ImageIcon plusIcon = new ImageIcon("plus.png");
        JLabel plusLabel = new JLabel(plusIcon);
        add(plusLabel, BorderLayout.CENTER);


        // generate quiz
        additionQuiz = new AdditionQuiz(Main.MaxNumber);
        additionQuiz.generateQuiz();

        flowLayout = new FlowLayout(FlowLayout.LEFT);
        rabbitIcon = new ImageIcon("rabbit.jpg");

        // paint rabbit
        paintLeftPanel();
        paintRightPanel();

    }

    public void paintRightPanel() {
        rightPanel = new JPanel();
        rightPanel.setLayout(flowLayout);
        rightPanel.setPreferredSize(new Dimension(250, 0));


        for(int i = 0; i < additionQuiz.getNumber2(); i++){
            rightPanel.add(new JLabel(rabbitIcon));
        }
        add(rightPanel, BorderLayout.EAST);
    }

    public void paintLeftPanel() {
        leftPanel = new JPanel();

        leftPanel.setLayout(flowLayout);
        leftPanel.setPreferredSize(new Dimension(250, 0));


        for(int i = 0; i < additionQuiz.getNumber1(); i++){
            leftPanel.add(new JLabel(rabbitIcon));
        }
        add(leftPanel, BorderLayout.WEST);
    }

    public JPanel getLeftPanel() {
        return leftPanel;
    }

    public JPanel getRightPanel() {
        return rightPanel;
    }

    public JLabel getLabel() {
        return label;
    }

    public AdditionQuiz getAdditionQuiz() {
        return additionQuiz;
    }

    public JSpinner getNumberSpinner1() {
        return NumberSpinner1;
    }

    public JSpinner getNumberSpinner2() {
        return NumberSpinner2;
    }

    public JSpinner getNumberSpinner3() {
        return NumberSpinner3;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值