背记不如实战系列-javaGUI实例-计算器制作

简介: 背记不如实战系列-javaGUI实例-计算器制作

在这里插入图片描述


👨‍💻个人主页@元宇宙-秩沅

**hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!**

本文由 秩沅 原创

收录于专栏 玩归玩闹归闹,别拿java开玩笑


⭐相关文章: ⭐
翻阅必备,一看必知——Java -GUI界面设计
GUI实例-之蓝色妖姬


@[TOC]


一,效果图


👨‍💻


在这里插入图片描述

二,完整代码

👨‍💻👍

package Win;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;
@SuppressWarnings("unused")
public class windows {
   
   
        public static void main(String[] args) {
   
   
               JMenu menu ;         //声明菜单
               JMenuBar bar ;     //  声明菜单条
        window w1 = new window("算术测试",450,250,700,200);
         menu  = new JMenu("选择级别");   w1.add(menu);          //添加菜单并命名
         bar = new JMenuBar() ;      
         bar.add(menu);
         w1.setJMenuBar(bar);
        }
    }
 @SuppressWarnings("serial")
class window extends JFrame implements MouseListener{
   
   

       JButton B1 ,B2 ;      //声明两个按钮
       JTextField T1 , T2 ,T3,T4 ;  //声明四个文本框
       JLabel L1 ,L2 ;       //声明两个标签


       public window(String A , int a , int  b ,int c ,int d )
       {
   
   

           setInit();
           setTitle(A);
           setBounds(a ,b ,c ,d );
           setVisible(true);
           validate();         //确保组件具有有效的布局
           setDefaultCloseOperation(DISPOSE_ON_CLOSE);
       }

      void setInit()   //统一组件添加
       {
   
        

             JPanel p = new JPanel();          add(p);             //添加面板容器

             FlowLayout F = new FlowLayout();  setLayout(F);       //设置布局

//添加第一个按钮
             B1 = new JButton("获取题目");
             B1.setPreferredSize(   new Dimension (  100 , 30  ) );
             p.add(B1); 
             B1.addMouseListener(this);
 //添加第一个文本框 ,并设置可见列数
             T1 = new JTextField(10);
             T1.setPreferredSize(   new Dimension (  100 , 30  ) );
             p.add(T1);
             T1.setEnabled(false);  //设置无法进行修改
//添加标签1
             L1 = new JLabel("➕");
             p.add(L1);
//添加第二个文本框  ,并设置可见列数
             T2 = new JTextField(10); 
             T2.setPreferredSize(   new Dimension (  100 , 30  ) );
             p.add(T2);
             T2.setEnabled(false);
//添加标签2
             L2= new JLabel("=");
             p.add(L2);
//添加第三个文本框 ,并设置可见列数
             T3 = new JTextField(10);
             T3.setPreferredSize(   new Dimension (  100 , 30  ) );
             p.add(T3);
             T3.setText("请输入答案");

 //添加第二个按钮
             B2 = new JButton("确认答案");
             B2.setPreferredSize(   new Dimension (  100 , 30  ) );
             p.add(B2); 
             B2.addMouseListener(this);
//添加第四个文本框 ,并设置可见列数
             T4 = new JTextField(10);
             T4.setPreferredSize(   new Dimension (  100 , 30  ) );
             p.add(T4);
             T4.setEnabled(false);  //设置无法进行修改       

       }

          //重写MouseListener接口的方法

          @Override
        public void mousePressed(MouseEvent e) {
   
   ;    }
          @Override
        public void mouseReleased(MouseEvent e) {
   
    ;    }
          @Override
          public void mouseEntered(MouseEvent e) {
   
       ;  }
          @Override
          public void mouseExited(MouseEvent e) {
   
       ;    }
          @Override
        public void mouseClicked(MouseEvent e)
        {
   
   
              //当按下的事件是B1按钮 且 按下的键是鼠标左键时
            if(e.getSource() == B1 &&e.getButton() == MouseEvent.BUTTON1)
            {
   
   
                 //让两个文本框生成随机数
                 Random random = new Random();
                 T1.setText( String.valueOf(random.nextInt(100)) );
                 T2.setText( String.valueOf(random.nextInt(100)) );
            }
            else if(e.getSource() == B2 &&e.getButton() == MouseEvent.BUTTON1)
            {
   
   
                int A , B , C ;
                //获取三个文本框中的字符串,并转化

                A = Integer.parseInt(T1.getText());
                B = Integer.parseInt(T2.getText());
                C = Integer.parseInt(T3.getText());

                if(A + B == C) T4.setText("答案正确");
                else  T4.setText("答案错误");
            }
        }
        }

三,翻阅必备


👨‍💻组件


(1)JTextField --文本框

 输入单行文本

(2)JTextArea--文本区

输入多行文本

(3)JButton--按钮

单击按钮

(4)JLable--标签

提供提示信息

(5)JChexkBox--复选框

提供多项选择

(6)JCombobox---下拉列表

下拉列表

(7)JPasswordField --密码框

输入密码

👨‍💻容器


(0)JFrame--底层容器

英文记忆 :Frame 框架

 Frame是窗口,窗口也是容器,下面的容器都称为为中间容器 

(1)JPanel--面板容器

英文记忆 :Panel 面板

默认布局为FlowLayout布局

(2)JTabbedPane --选项卡窗格容器

英文记忆 :Tabbel 选择

可作为中间容器,添加组件后课自动指定选项卡
1. 静态方法: add(  strng a  , Component c ) -----添加组件
2. 构造方法:public JTabbedPane( int  tabPlacement )   ---  tabPlacement 决定选项卡的位置

(3)JScrollPane---滚动窗格容器

英文记忆 :Scroll 滚动

只可以添加一个组件,通过滚动条来观看该组件
    一般将JTextArea 文本区 放到滚动窗格中
    JScrollPane scroll = new JScrollPane ( new  JtextArea ( ) );

(4)JSplitPane---拆分窗格容器

英文记忆 :Split 分离

被分成两部分的容器: 水平拆分窗格 ,垂直拆分窗格
1.静态常量:
水平拆分 :HORIZONTAL_SPLIT
垂直拆分:VERTICAL_SPLIT
2. 构造方法:
JSplitPane( int a , Component b ,  Component c )
JSplitPane( int a ,boolean d , Component b ,  Component c )
3,解释
参数a 填上面的两个静态常量来决定水平或垂直拆分
参数d决定拆分线移动时组件是否发生连续变化

(5)JLayeredPane----分层窗格

英文记忆 :Layered 分层

 可将需要处理重叠问题的组件添加到分层窗格中,分窗格分为五层
 1.静态方法:  add( JComponent com , int layer )
 2.解释 :     参数layer 填:
 DEFAULT_LAYER   第一层
 PALETTE_LAYER   第二层
 MODAL_LAYER     第三层
 POPUP_LAYER     第四层
 DRAG_LAYER      第五层

👨‍💻布局


(1)FlowLayout布局

英文记忆 :flow 跟随,顺从

是JPanel(面板)的默认布局 ,特点:对象居中对齐,先后顺序,从左到右排列

使用FlowLAyout的容器 , 要改变组件大小的方法,如容器中的按钮组件:

button.setPreferredSize(   new Dimension (  长  , 宽  )   )

(2)BorderLayout布局

英文记忆 :Border 边界

将区域划分 东 西 南 北 中 五个区域

如使用BorderLayout布局的容器con ,添加组件b 到北方区域
方法 :       con.add(  b , BorderLayout .  NORTH ) ;
静态常量:
EAST
WEST
SOUTH
NORTH
CENTER

(3)CardLayout布局

英文记忆 :card 卡片

叠扑克牌布局 , 点击组件,同一时刻只能 显示一个
  如:布局设置在容器con设置方法
(1)CardLayout card = new  CardLayout();
(2)con .setLayout(    card  ) ; //设置布局
(3)con.add( String a  , Component b ) ;  //添加组件进入设置好布局的容器
(4)card.show( con , string a ); //显示容器中名字为a 的组件

(4)GridLayout布局

 英文记忆 :Grid 网格
    GridLayout是使用较多的布局编辑器,将组件划到网格中

(5)NULL布局

可以DIY随意组件的位置 ,例如:p是个容器

   方法:  p.setLayout(  null ) ;

   组件. setBounds( int a  , int b , int width ,int height );
       a  b 代表组件的位置 
       width height代表组建的长和宽

👨‍💻事件👍


(1)DocumentEvent事件


1,事件源

和文本区有关的事件,通过get.Document()返回所维护的文档

2.注册监视器

(xx.getDocument()).addDocummentListener( DocumentListen YY );

3,接口中的方法
方法|描述
-------|--------
public void changedUpDate() | 发出属性或属性集已更改的通知
public void removeUpDate() | 通知文档有删除

public void insertUpDate() | 通知文档有插入)

(2) ActionEvent事件


1.事件源

文本框,按钮,菜单项,密码框和单选按钮都可触发该事件

2.注册监视器

XX.addActionListener( ActionListener YY)

3,接口中的方法
方法|描述
-------|--------
public void actionPerformed( ActionEvent e )| 对发生的事件进行处理

4.ActionEvent类中的方法
方法|描述
-------|--------
public Object getSourse( ) | 可以获取发生ActionEvent事件的事件源对象的引用

public String getActionCommand()| 获取发生ActionEvent事件时和该事件相关的一个“命令”字符串,默认为文本框的文本

(3)MouseEvent事件


1.事件源

MouseListener可以处理5种操作触发的鼠标事件:
(1)事件源上按下鼠标键
(2)事件源上释放鼠标键
(3)事件源上单击鼠标
(4)鼠标进入事件源
(5)鼠标退出事件源头

2.注册监视器

xx.addMouseMOtionLIstener( MouseMotionListener YY)

3.MouseListener接口中的方法

方法 描述
mousePressed(MouseEvent) 负责处理在组件按下鼠标键触发的鼠标事件
mouseReleased(MouseEvent) 负责处理在组件释放鼠标键触发的鼠标事件
mouseEntered(MouseEvent) 负责处理在组件进入鼠标键触发的鼠标事件
mouseExited(MouseEvent) 负责处理在组件离开鼠标键触发的鼠标事件
mouseClicked(MouseEvent) 负责处理在组件单击鼠标键触发的鼠标事件

4.MouseMotionListener 接口中的方法

方法 描述
mouseDragged(MouseEvent) 负责处理拖动鼠标触发的鼠标事件
mouseMoved(MouseEvent ) 负责处理映移动鼠标触发的鼠标事件

5.MouseEvent 类的方法
方法|描述
-------|--------
getX()|获取鼠标指针在事件源坐标系中的X坐标
getY()|获取鼠标指针在事件源坐标系中的Y坐标
getButoon()|获取鼠标的键: 左键 BUTTON1 ,中键 BUTTON2 ,右键 BUTTON3
getClickCount()| 鼠标被单击的次数

getsource()|获取发生鼠标事件的事件源

(4)KeyEvent事件


1.事件源

当按下,释放或敲击键盘上的一个键时就触发了键盘事件

2.注册监视器

xx.addKeyListener(KeyListener YY )

3.KeyListener接口方法
方法|描述
-------|--------
public void keyPressed(KeyEvent e )|处理按下键时的事件
public void keyTyped(KeyEvent e )|处理键入时的事件
public void keyReleased(KeyEvent e )|处理释放键时的事件

4.KeyEvent类方法
方法|描述
-------|--------
public int getKeyCode( )|判断哪个键被按下,敲击或释放
public int getKeyChar( )|判断哪个键被按下,敲击或释放而后返回键上的字符

5,键码表
在这里插入图片描述


(5)windowEvent事件


1.windowEvent类方法
—————————==设置窗口关闭的方式 的方法==———————————— setDefaultCloseOperation( int operation)的 参数常量如下| 常量描述
-------|--------
DO_NOTHTING_ON_CLOSE | 什么也不做
HIDE_ON_CLOSE| 隐藏当前窗口
DISPOSE_ON_CLOASE|隐藏当前窗口并且释放当前窗口占有的其他资源
EXIT_ON_CLOSE|结束窗口所在的应用程序

2.WindowListener接口的方法
方法|描述
-------|--------
public void windowActivated( windowEvent e )| 当窗口从非激活状态到激活状态时
public void windowDeactivated( windowEvent e )| 当窗口从激活状态到非激活状态时
public void windowClosing windowEvent e )| 当窗口正在关闭时
public void windowClosed windowEvent e )| 当窗口关闭后
public void windowOpened windowEvent e )| 当窗口打开时
public void windowIconified windowEvent e )| 当窗口图标化时
public void windowDeiconified windowEvent e )| 当窗口撤销图标化时

你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!

目录
相关文章
|
2月前
|
XML 小程序 前端开发
小程序制作教程
小程序制作教程
67 3
小程序制作教程
|
7月前
|
前端开发
好看的前端计算器代码分享(html+css+js制作计算器)
好看的前端计算器代码分享(html+css+js制作计算器)
148 0
|
小程序 前端开发 JavaScript
【小程序】注册安装及创建小程序---入门级别必读
【小程序】注册安装及创建小程序---入门级别必读
147 0
|
小程序 JavaScript
微信小程序——计算器案例
微信小程序——计算器案例
733 0
微信小程序——计算器案例
|
存储 Serverless
微信小游戏制作工具中的函数应该如何使用
在微信小游戏制作工具中是没有私有函数这个概念的,也就是说所有的函数都是公共的,大家都可以使用,而且函数也没有返回值的概念,想拿到函数运行的结果只能通过设置一个全局变量,将结果存储在全局变量中,然后通过这个全局变量来使用。这种方法有很多的弊端,尤其是在有大量的克隆体存在时,每个克隆体都使用同一个函数,都去设置同一个全局变量,就会造成意想不到的结果。
304 0
计算器(简易版)
另一种是利用转移表的方式来写,将各个函数的地址存放在一个函数指针数组里面,当要使用函数时,就直接调用指针即可,可以改观上面的美观(上面的代码有很多重复的,太挫了)
97 0
|
Python
python实现简单的计算器 带界面
python实现简单的计算器 带界面
283 0
python实现简单的计算器 带界面
|
小程序 JavaScript 容器
【微信小程序】计算器案例
接下来我们来编写页面内容。我们可以先观察计算器的布局,计算器的布局是5行4列,所以我们先写5个view组件表示5行,每个view中分别添加4个view表示4列。每个view表示计算器的不同按键。给每个按键定义数据data-val。
课外拓展1.模拟计算器的三种方法
回调函数的参数就是一个函数指针,这个指针便可以接收函数了,因为指针并没有指向,所以这个指针可以接收任意一个函数、
99 0