基于Java GUI实现的猜数字的小游戏

    今天在做学校里的java课程实验报告时遇到了这样的实验:

 这样的图形化界面我之前做过一次,之前是工作室考核时,要求我们用Swing图形化(窗口化)展示工作室小组成员的管理系统的相关面板。当时也是一个练手的项目吧。也正好接着这个报告再来回顾一下这个Swing的相关的一些操作。

首先先回顾一下我们的相关知识:

实验原理:

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。

命令来完成例行任务的字符界面相比,图形用户界面有许多优点。图形用户界面由窗口、下拉菜单、对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相同的操作总是以同样的方式来完成,在图形用户界面,用户看到和操作的都是图形对象,应用的是计算机图形学的技术。

实现功能不能缺少组件,主要包括以下的一些组件:窗口,弹窗,面板,文本框,列表框,按钮,图片,监听事件,鼠标,键盘事件

实验结果分析:

GUI设计提供了丰富的类库,这些类分别位于java.awtjavax.swing包中,简称为AWTSwing

Swing不仅实现了AWT中的所有功能,而且提供了更加丰富的组件和功能。

Swing组件的所有类都继承自Container类,然后根据GUI开发的功能扩展了两个主要分支:容器分支(包括Window窗口和Panel面板)和组件分支。

        容器分支:是为了实现图形用户界面窗口而设计的。

        组件分支:是为了实现向容器中填充数据、元素以及人机交互组件等功能。

Swing 提供了三个主要的顶级容器类:JFrameJDialogJApplet

 JFrameFrame一样是一个独立存在的顶级窗口,不能放置在其它容器之中,JFrame支持通用窗口所有的基本功能,例如窗口最小化、设定窗口大小等等。下面通过一个小案例来展示JFrame的使用效果。Swing组件不能单独存在,必须放置于容器中,而组件在容器中的位置和尺寸是由布局管理器来决定的。Swing工具在AWT的基础上提供了8中布局管理器,分别为 BorderLayout(边界布局管理器)等等。1. 事件源(组件):事件发生的场所,通常就是产生事件的组件,例如窗口、按钮、菜单等

 事件对象(Event:封装了GUI组件上发生的特定事件(通常就是用户的一次操作)

监听器(Listener:负责监听事件源上发生的事件,并对各种事件做出响应处理的对象(对象中包含事件处理器) 。事件处理器:监听器对象对接收的事件对象进行相应处理的方法

AWT中提供了丰富的事件,大致包括窗体事件、鼠标事件、键盘事件、动作事件等。

实验代码如下:

package com.csh.java;

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

public class GUI {

    static  int min=0,max=1000,count=1,a=new Random1().getone();
    public static void main(String[] args) {

        JFrame jFrame = new JFrame("猜数字游戏");//创建对象
        jFrame.setVisible(true);//窗口的可视化
        jFrame.setBounds(650, 150, 500, 600);//窗口的初始化
        jFrame.setResizable(false);
        Container container = jFrame.getContentPane();
        container.setBackground(Color.lightGray);
        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭事件
        container.setLayout(null);

        JTextField t =new JTextField();
        container.add(t);
        t.setBounds(120,510,200,20);
        JLabel jLabel2 = new JLabel("输入想猜的数字:");
        container.add(jLabel2);
        jLabel2.setBounds(20,505,100,30);

        JButton jButton = new JButton("猜一猜");
        container.add(jButton);
        jButton.setBounds(330,500,100,40);

        JTextArea jTextArea = new JTextArea();

        jTextArea.setLineWrap(true);    //设置自动换行,自动换行则不会出现横向的滚动条
        jTextArea.setEditable(true);
        JPanel jPanel = new JPanel();
        JScrollPane scroll=new JScrollPane(jTextArea);
        container.add(scroll);
        jTextArea.setBounds(0,0,500,500);
        scroll.setBounds(0,0,480,500);
        //初始化按钮信息
        //处理按钮的监听器
        jButton.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //获取到文本框中的值
                String text = t.getText();
                //这里需要一个随机数的生成工具
                int b= Integer.parseInt(text);
                if(a>b)
                {
                    String s="第"+(count++)+"次猜的数字在"+min+"到"+max+"之间"+b+"\n"+b+"猜小了,请重新第"+(count)+"次猜"+b+"和"+max+"之间"+"\n";
                    min=b;
                    jTextArea.append(s);
                }else if(a<b)
                {
                    String s="第"+(count++)+"次猜的数字在"+min+"到"+max+"之间"+b+"\n"+b+"猜大了,请重新第"+(count)+"次猜"+min+"和"+b+"之间"+"\n";
                    max=b;
                    jTextArea.append(s);
                }
                else
                {
                    String s="第"+(count++)+"次猜的数字在"+min+"到"+max+"之间"+b+"\n"+"恭喜你花了"+(--count)+"次猜对了!请退出";
                    jTextArea.append(s);
                    count=0;
                    min=0;
                    max=1000;
                    a=new Random1().getone();
                }
                if(count==11)
                {
                    String s="已用完,请退出"+"正确的数字是"+a+"\n";
                    jTextArea.append(s);
                    count=0;
                    min=0;
                    max=1000;
                    a=new Random1().getone();
                }
            }
        });

    }
}

运行结果:

 

  • 2
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jakeonil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值