Java实现两数相加的GUI小游戏(理解线程)

瞎搞的界面展示:

游戏规则:

小游戏的游戏的规则,在10秒内答题,答题记录放入下面的文本区域内,时间到达之后不允许答题,非数字的输入无效,输入之后可以直接回车。

瞎闹:

package Jaddplay;
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.Timer;

public class AddPlay extends JFrame {
	private static JLabel label1,label2,label3,label4,label5;//标签
	private static JButton button,button1;//按钮
	private static JTextField textField1;//文本框
	private static JTextField textField2,textField3;
	private JTextArea textArea1;//文本域
	private Thread thread;//线程对象
	private JMenuBar menubar;
	private JMenu menu;
	private JMenuItem item1,item2;
	private Icon icon;
	
	public AddPlay() {}
	public AddPlay(String string,Thread th1)
	{
		thread=th1;//构造方法内构造线程对象

		Font font = new Font("",Font.BOLD ,32);//设置字体对象
		//icon=new ImageIcon("开始.png");
		label1=new JLabel("+");//标签参数设置
		label1.setFont(font);
		label1.setForeground(Color.white);//设置标签内文字颜色
		label1.setEnabled (true);
		label2=new JLabel("=");
		label2.setForeground(Color.white);
		label2.setFont(font);
		label2.setEnabled(true);//设置标签是否可以更改
		label3=new JLabel("答案:");
		label3.setFont(font);
		label3.setForeground(Color.white);
		label3.setEnabled(true);
		label4=new JLabel(" ");
		label4.setFont(font);
		label4.setEnabled(true);
		label4.setForeground(Color.white);
		label5=new JLabel("判断");
		label5.setFont(font);
		label5.setEnabled(true);
		label5.setForeground(Color.white);
		
		button= new JButton("确认");//按钮组件部分
		button.setFont(font);
		button.setForeground(Color.white);
		button.setBackground(new Color(65,141,141));
		button1=new JButton("开始");
		button1.setFont(font);
		button1.setForeground(Color.white);
		button1.setBackground(new Color(62,88,201));
		
		textField1 =new JTextField(5);//文本框组件部分
		textField1.setFont(font);
		textField1.setBackground(new Color(238,234,231));
		textField2 = new JTextField(5);
		textField2.setFont(font);
		textField2.setBackground(new Color(238,234,231));
		textField3 = new JTextField(5);
		textField3.setFont(font);
		textField3.setBackground(new Color(238,234,231));
		
		
		textArea1=new JTextArea(10,30);//设置文本域组件
		JScrollPane scrollPane=new JScrollPane(textArea1);//设置文本域滚动面板
		textArea1.setFont(font);
		textArea1.setBackground(new Color(60,152,160));
		
		
		JPanel panel1 = new JPanel();//设置面板1的布局
		JPanel panel2 = new JPanel();//设置面板2的布局
		panel1.setLayout(new FlowLayout());
		panel2.setLayout(new FlowLayout());
		
		panel1.setBackground(new Color(12,72,83));
		panel2.setBackground(new Color(12,72,83));
		
		panel1.add(textField1);
		panel1.add(label1);
		panel1.add(textField2);
		panel1.add(label2);
		panel1.add(textField3);
		panel1.add(button);
		panel1.add(button1);
		panel1.add(label3);
		panel1.add(label5);
		panel2.add(label4);
		
		this.setTitle(string);//设置窗口布局
		this.setBackground(new Color(36,82,132));
		this.setLayout(new BorderLayout());
		this.setBackground(Color.pink);
		this.add(panel2, BorderLayout.NORTH);
		this.add(panel1, BorderLayout.CENTER);
		this.add(scrollPane, BorderLayout.SOUTH);
		this.pack();//调整该窗口为最佳尺度
		this.setVisible(true) ; //将面板可视化
		
		int t1=(int)(Math.random()*10+1);
		int t2=(int)(Math.random()*10+1);
		textField1.setText(""+t1);
		textField2.setText(""+t2);
		
		button.addActionListener(new Sure());//将监听器加组件上
		button1.addActionListener(new Star());
		textField3.addKeyListener(new KeyDowd());
		textField3.requestFocus();//光标焦距到文本框
		
		
		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		
		
		/*测试学习部分
		menubar=new JMenuBar();
		menu=new JMenu("文件");
		item1=new JMenuItem("打开");
		item2=new JMenuItem("保存");
		
		menu.add(item1);
		menu.add(item2);
		menubar.add(menu);
		this.setJMenuBar(menubar);
		validate();
		*/
		
		
		
	}

class Star implements ActionListener {//开始按钮监听器
	public void actionPerformed(ActionEvent e){
		try {
			
				textField3.requestFocus();
				thread.start();
				Thread.sleep(1000);
			
		}catch(Exception a) {
			System.out.println("不要重复点开始嘛!");
		}
		
		
	}
	}

	
class Sure implements ActionListener{ //确定按钮监听器
    	public void actionPerformed(ActionEvent e){
    		try {
    			
    			String t1=textField1.getText();
        		String t2=textField2.getText();
        		String t3=textField3.getText();
        		int a1 = Integer.parseInt(t1);
        		int a2 = Integer.parseInt(t2);
        		int a3 = Integer.parseInt(t3);
        		if(a1+a2==a3){
        			
        			label5.setText("正确");
        			label5.setForeground(Color.green);
        			textArea1.append(a1+"+"+a2+"="+a3+" "+"正确\n");
        			textField3.setText("");	
        		}
        		else {
        			label5.setText("错误");
        			label5.setForeground(Color.red);
        			textArea1.append(a1+"+"+a2+"="+a3+" "+"错误\n");
        			textField3.setText("");	
        		}
    		}
    		catch(NumberFormatException er){
    			
    			textArea1.append("您设置的格式出错!\n");
    			
    		}
    		finally {
				int t1=(int)(Math.random()*10+1);
        		int t2=(int)(Math.random()*10+1);
        		textField1.setText(""+t1);
        		textField2.setText(""+t2);
        		textField3.requestFocus();
    		}
    } 
	} 

class KeyDowd extends KeyAdapter{ //C实现了接口KeyListener中所有方法      
	public void keyPressed(KeyEvent e) {
		int c =(int)e.getKeyChar();
		if ( c== '\n' ) {//遇到键盘回车监听器
			try {
				
				String t1=textField1.getText();
	    		String t2=textField2.getText();
	    		String t3=textField3.getText();
	    		int a1 = Integer.parseInt(t1);
	    		int a2 = Integer.parseInt(t2);
	    		int a3 = Integer.parseInt(t3);
	    		if(a1+a2==a3){
	    			label5.setText("正确");
	    			label5.setForeground(Color.green);
	    			textArea1.append(a1+"+"+a2+"="+a3+" "+"正确\n");
	    			textField3.setText("");	
	    		}
	    		else {
	    			label5.setText("错误");
	    			label5.setForeground(Color.red);
	    			textArea1.append(a1+"+"+a2+"="+a3+" "+"错误\n");
	    			textField3.setText("");	
	    		}
			}
			catch(Exception ex) {
				System.out.println(ex);
				System.out.println("未知异常!游戏结束!");	
			}
			finally {
				int t1=(int)(Math.random()*10+1);
        		int t2=(int)(Math.random()*10+1);
        		textField1.setText(""+t1);
        		textField2.setText(""+t2);
        		textField3.requestFocus();
			}
		}		
	}
	public void keyTyped(KeyEvent e) {//判断输入的时候是否数字
		int c =(int)e.getKeyChar();
		if (!(c >= '0' && c <= '9')) {
			e.consume();//释放键盘的字
		}	
	}
	public void keyReleased(KeyEvent e){
				
	}
  } 

class Plan implements Runnable{//设置任务的线程
	int count=0;
  	@Override
	public void run(){
  		while(true)
  		{
  			
  			try {
  				Thread.sleep(1000);
  				if(count==10)
  				{
  					
  					button.setEnabled(false);
  					textField3.setEnabled(false);
  					break;
  				}
  					count++;
  					button1.setText(""+count);
  					System.out.println(count);
  			}catch(Exception b) {
  				System.out.println(b);
  			}
  		
  			button1.setText(""+count);
  		}
  		
  	} 
	} 

	public static void main(String[] args) throws InterruptedException{
		Plan plan=new AddPlay().new Plan();
		Thread t1= new Thread(plan);//建立线程
		new AddPlay("两数之和小游戏",t1);
		
		LinkedList list=new LinkedList();
		/*用timer类建立单线程实行计数
		Timer timer = new Timer();
		timer.schedule(new TimerTask(){
            int count = 0;
			public void run(){
				textField3.requestFocus();
        		if(count==9) {
        			System.out.println("游戏结束!");
        			button.setEnabled(false);
        			textField3.setEnabled(false);
        			timer.cancel();
        		}
        		synchronized (this) {
                	count=count+1;
                	button1.setText(""+count);
                }
            }},1000,1000);
            
		 */
		
	}
	
}

话痨:

在学习Java这门课程的小程序,分享给大家,希望有用,小弟能力不才,望有高人指点。

花哥哥严肃说:

所学的知识均从课本,课外读物,网上收集资料,如果哪有侵权惹到您不开心丫,此外还有我也是小白,如果哪有认识不对的地方还请您抽我一耳光说我哪错了,我一定会感谢,联系企鹅号:184820911,有哪不明白或没事都可以找我,陪聊,陪吃不陪睡。

发布了28 篇原创文章 · 获赞 34 · 访问量 6066

猜你喜欢

转载自blog.csdn.net/L184820911/article/details/96882252