Java的小图形练习

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zy_dream/article/details/52644443

因今天图书管理模块写的数据库操作这里还是有问题,恰好今天也学习了一个名为小学生习题训练程序,是一个简单的图形化的关于监听事件的学习。

最后运行实例图如下

点击开始,会显示共几道题,输入答案后点击下一题或者按键盘Enter即可,最后显示结果。

我觉得这个小程序设计的核心所在就是如何随机的显示数学题,真相就是可以用JLable来设置。

package Java的小图形练习;

import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class StudentScreen extends JPanel{
	JLabel num1=new JLabel("0  ");
	JLabel num2=new JLabel("0  ");
	JLabel op=new JLabel("+");
	JLabel info=new JLabel("测试时间10分钟,点击“开始”按钮进行答题");
	JTextField answer=new JTextField(10);
	JButton next=new JButton("下一题");
	JButton start=new JButton("开始");
	JPanel p1=new JPanel();
	JPanel p2=new JPanel();
	JPanel p3=new JPanel();
	
	public StudentScreen(){
		setLayout(new GridLayout(3, 1));
		
		p1.add(info);
		p1.add(start);
		
		p2.add(num1);
		p2.add(op);
		p2.add(num2);
		p2.add(new JLabel("="));
		p2.add(answer);
		
		p3.add(next);
		
		add(p1);
		add(p2);
		add(p3);
	}
	
}
这个是显示的主界面,也是给我提示的地方。三个次jpanel,在主jpanel里面setLayout把布局设置好,当然好像这个方法是限于信息描述少的吧。

然后就再设置一个子类,来给上面这个父类改变显示即可

package Java的小图形练习;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

import javax.swing.JOptionPane;

public class Exercises extends StudentScreen implements ActionListener,KeyListener{
	int count=0;
	int n1=0,n2=0;
	int total=0;
	int right=0;
	long timenum=0;
	Random rand=new Random();
	
	public Exercises(int t){
		this.total=t;
		answer.setEnabled(false);
		start.addActionListener(this);
		next.addActionListener(this);
		answer.addKeyListener(this);
	}

	public void keyPressed(KeyEvent e) {
		if (e.getKeyCode()!=e.VK_ENTER)
			return ;
		compute();
	}

	public void keyReleased(KeyEvent e) {
	}

	public void keyTyped(KeyEvent e) {		
	}

	public void actionPerformed(ActionEvent e) {
		if (e.getSource()==start){
			info.setText("共"+total+"题");
			start.setEnabled(false); 			//按钮实效
			answer.setEnabled(true);
			answer.requestFocus();
			count=right=0;
			n1=rand.nextInt(100);
			n2=rand.nextInt(100);
			num1.setText(""+n1);
			num2.setText(""+n2);
			timenum=System.currentTimeMillis();
		}
		else if (e.getSource()==next){
			compute();
		}
	}

	private void compute() {
		float x=0;
		if (op.getText().equals("+"))
			x=n1+n2;
		else if (op.getText().equals("-"))
			x=n1-n2;
		else if (op.getText().equals("*"))
			x=n1*n2;
		else if (op.getText().equals("/"))
			x=n1/n2;
		
		if (x==Float.parseFloat(answer.getText()))
			right++;
		
		count++;
		
		if (count==total){
			JOptionPane.showMessageDialog(null, "总题数:"+total+";答对:"+right+"道;费时:"+(System.currentTimeMillis()-timenum)/60000+"分");
		}
		
		n1=rand.nextInt(100)+1;
		n2=rand.nextInt(100)+1;
		num1.setText(""+n1);
		num2.setText(""+n2);
		op.setText(setOperator());
		answer.setText("");
		answer.requestFocus();
	}

	private String setOperator() {
		String o=null;
		if (n1>50&&n2>50){
			if (n1>n2)
				o="+";
			else
				o="-";
		}
		else if (n1>50&&n2<=50){
			if (n2>10)
				o="-";
			else
				o="/";
		}
		else if (n2>50&&n1<=50){
			if (n1>10)
				o="+";
			else
				o="*";
		}
		else if (n1<=50&&n2<=50){
			if (n1>n2&&n2<10)
				o="/";
			else if (n1<10&&n2<10)
				o="*";
			else
				o="+";
		}
		return o;
	}
	
	
	
	
}
其实如果仅仅是按逻辑思维来想的话是很简单,但是来写确实得想好需要构造几个函数,每个函数需要什么功能。

主要是compute()来更新主界面,看,是不是把结果也是在这个函数的。

package Java的小图形练习;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class StudentTest {

	public static void main(String[] args) {
		JFrame test=new JFrame();
		JPanel t=new Exercises(10);
		
		test.add(t);
		test.setVisible(true);
		test.pack();
		test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

}
最后也发现哦,jf是可以直接添加jp的,他喵的哦,前几天居然还用其它方法了。




展开阅读全文

没有更多推荐了,返回首页