博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019暑假第一周总结
阅读量:5007 次
发布时间:2019-06-12

本文共 4775 字,大约阅读时间需要 15 分钟。

这周数据结构小学期,完成了自己“24点游戏”的报告,学习了Java图形化界面(GUI)的许多东西,下面是在学习网上代码(学习地址:)过程中自己学习的东西。

24点计算,Java的图形用户界面(GUI)

一、 引包:

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.util.*;

import javax.swing.JOptionPane;

  1. awt 抽象组件窗口包,java最早的用于编写图形应用程序的开发包。

包含用于创建用户界面和绘制图形图像的所有类。在 AWT 术语中,诸如按钮或滚动条之类的用户界面对象称为组件。Component 类是所有 AWT 组件的根。(本次开发主要应用按钮组件)当用户与组件交互时,一些组件会激发事件。AWTEvent 类及其子类用于表示 AWT 组件能够激发的事件。容器是一个可以包含组件和其他容器的组件。容器还可以具有布局管理器,用来控制容器中组件的可视化布局。AWT 包带有几个布局管理器类和一个接口,此接口可用于构建自己的布局管理器。

由于AWT 是依靠本地方法来实现其功能的,我们通常把AWT控件称为重量级控件

  2. swing 为了补充awt的一些功能性的缺失问题而开发的包,以awt为基础。

提供一组“轻量级”(全部是 Java 语言)组件,尽量让这些组件在所有平台上的工作方式都相同。

JoptionPane类:四种消息提示框(showConfirmDialog():确认对话框 、showInputDialog():输入对话框(下拉列表形式、文本框形式) 、showMessageDialog():消息对话框 、showOptionDialog():选择对话框);五种消息类型(ERROR_MESSAGE 、INFORMATION_MESSAGE (自定义标题,自定义图标)、WARNING_MESSAGE 、QUESTION_MESSAGE 、PLAIN_MESSAGE (自定义标题,但没有图标))类型不同,图形化界面的图标也不同。JOptionPane.showMessageDialog(null, "友情提示");(默认标题、默认图标)

区别:由于实现的不同,awt是基于本地方法的C/C++程序,运行速度比较快,消耗资源少;Swing是基于awt的Java程序,所以运行速度慢。对于嵌入式应用,往往采用AWT;通常在标准的Java应用中,使用Swing牺牲运行速度换取开发效率和功能。

(百度文库、https://blog.csdn.net/tjk123456/article/details/77868034)

  3.util  在这个包中,Java提供了一些实用的方法和数据结构。例如,Java提供日期(Data)类、日历 (Calendar)类来产生和获取日期及时间,提供随机数(Random)类产生各种类型的随机数,还提供了堆栈(Stack)、向量 (Vector) 、位集合(Bitset)以及哈希表(Hashtable)等类来表示相应的数据结构。

(详情见:)

  4.util中的stack类,实现了一个标准的后进先出的栈。本题利用栈来实现数学表达式的计算。

  5.extends JFrame 继承JFrame类,初始化窗口,添加按钮、显示框、文本框等,设置大小、设置可见、设置字体、添加响应事件,将容器JFrame实例设置为可见。

  6.JButton AbstractButton类的扩展,当按钮被选中,点击时会出现不同的状态,Swing本身的展示效果在绘制面板的时候不尽人意,因此可以通过更改按钮的鼠标事件来美化按钮。

https://blog.csdn.net/llwwlql/article/details/51635403

  7.JLabel 对象可以显示文本、图像或同时显示二者。可以通过设置垂直和水平对齐方式,指定标签显示区中标签内容在何处对齐。默认情况下,标签在其显示区内垂直居中对齐。默认情况下,只显示文本的标签是开始边对齐;而只显示图像的标签则水平居中对齐。 还可以指定文本相对于图像的位置。默认情况下,文本位于图像的结尾边上,文本和图像都垂直对齐。

https://blog.csdn.net/lzm18064126848/article/details/48048143

  8.JTextField 想要实时监听键盘输入内容必须实现DocumentListener接口

insertUpdate 是实时监听输入的内容,该方法可以跟踪文本框中输入的内容

removeUpdate是实时监听删除内容,该方法可以跟踪文本框中移除的内容

changedUpdate是更新内容,该方法可以跟踪当文本框中已存在的内容改变时(这个方法比较少用)

https://blog.csdn.net/LQdesolation/article/details/81263261

  9.JPanel 缓冲区部分

  10. ImageIcon 此类用于向窗口中添加图片,它根据 Image 绘制 Icon。可使用 MediaTracker 预载根据 URL、文件名或字节数组创建的图像,以监视该图像的加载状态。

二、 变量:

1.定义图形化界面中的按钮变量

private JButton jbsolution = new JButton("正确答案");

        private JButton jbrefresh = new JButton("刷新");

private JButton jbverify = new JButton("提交答案");

2.定义图形化界面中要输入的文本部分。

private JLabel jlmessage = new JLabel("输入你的答案:");

3.定义实时监听窗口中的键盘输入内容的函数,

private JTextField jtsolution = new JTextField();

private JTextField jtexpression = new JTextField();

4.引用定义类ImagePanel,定义pp绘制图像部分

private ImagePanel pp = new ImagePanel();

5.Card 整形数组【4】用于记录img文件夹中的图片的数组下标/ bcard double型数组【4】用于记录4张图片中的数值。

6.Sum double计算总值 / temp1 double型数组【3】存顺序存储初次计算成功的数值、temp2 double型数组【2】存储之后的 / sign char型数组【】 定义符号,加减乘除

三、 函数:

1.ImagePanel类

继承javax.swing.JPanel类

Public void sshow()函数,将52张扑克牌大小,随机(利用random)显示4张,里面用到了void java.awt.Component.repaint()方法【repaint()】用来重绘图像,实现,刷新4张扑克牌的图形化界面。

protected void paintComponent(Graphics g) 函数,继承java.awt.Graphics中的paint(java.awt.Graphics)函数,用于绘制此组件,即将4张扑克牌大小随机显示在窗口,绘制组件的内容调用此方法,参数g用于绘制组件的上下文;使用ImageIcon添加图片;定义一个新的image用于表示使用getImage()函数返回能被绘制到屏幕上的 Image 对象。url 参数必须指定绝对 URL。是否返回,返回,则为真;然后利用g.drawImage()用来根据x、y坐标绘制图像。该方法用于绘制指定图像中已缩放到适合指定矩形内部的图像。

参数:

img - 要绘制的指定图像。如果 img 为 null,则此方法不执行任何动作。

x - x 坐标。

y - y 坐标。

width - 矩形的宽度。

height - 矩形的高度。

  • observer - 当转换了更多图像时要通知的对象。

              返回:

如果图像像素仍在更改,则返回 false;否则返回 true。

 2.Count24()

利用java.awt.GridLayout.GridLayout(int rows, int cols)这个布局管理器实现窗口的布局;

利用BorderLayout是Frame的默认的布局管理器;是上下左右中形式的,用add方法添加Component时;第二个参数指定位置;不指定加入部位,默认放入center区;同一部位只能放一组件,放多个会覆盖以前的;必须有center。英语表示为东南西北中心的英语。

然后给三个不同按钮增添事件监听器

 3.ButtonListener 类

使用java.awt.event.ActionListener接口,用于接收操作事件的侦听器接口,此处用于定义的4个按钮;在发生操作事件时,调用该对象的 actionPerformed 方法public void actionPerformed(ActionEvent e)。

如果按钮名为“正确答案”,则进行计算,首先利用card和bcard进行对应照片数值,然后,调用search()方法。

如果按钮名为“刷新”,调用图像pp的展示图像方法,重新展示图像。

如果按钮名为“提交答案“,定义expression,用来监听从键盘输入的内容,并得到键盘输入的内容,计算结果result,调用evaluateExpression方法,计算结果,判断结果正确与否,并输出相应的窗口。4.Search()方法

首先定义 judge为boolean类型,值为false

使用for嵌套循环,实现对4张扑克牌数值的计算。

最内层for循环,相邻数字顺序计算,并顺序存储,计算一直调用calcute函数

计算完成后,若sum数值为24,则judge变为true,

根据括号放置位置的不同(6种情况),输出正确答案。

若judge一直为空,则输出“无解“

5.public static int evaluateExpression(String expression)

扫描表达式,使用StringTokenizer对象来分离运算符与操作数,并将运算符和操作数,压入不同的栈中,先进后出的原则。其中在对分离的运算符与操作数进行计算时,调用processAnOperator方法。

6.public static void processAnOperator(java.util.Stack<Integer> operandStack,java.util.Stack<Character> operatorStack)

如果,运算符匹配结果为+,则+出栈,对应,两个数出栈,将其相加结果入栈;

其余同理。

7.public static double calcute(double a,double b,char c)

进行左右计算式的计算。C为计算符号,a、b为数值。C值为其他符号或,做除法b为0,均返回-1.

8.主函数 public static void main(String[] args)

四、 Bug1 无解结果错误;Bug2  刷新只刷新图像,文本框内容不会刷新。

 

转载于:https://www.cnblogs.com/Qi77/p/11146803.html

你可能感兴趣的文章
走在Android开发的路上(二):Android快速入门
查看>>
Hbase取数据问题Bug
查看>>
《你的灯还亮着吗》阅读笔记三
查看>>
POJ2533 Longest ordered subsequence
查看>>
大话设计模式之简单工厂模式
查看>>
如何创建ASM磁盘?
查看>>
利用U盘安装Cent OS 7操作系统
查看>>
贝塞尔曲线值
查看>>
通用链表实现(参考Linux List)
查看>>
Cider扩展架构:AttributeTable和AttributeTableBuilder
查看>>
phpMyAdmin项目已迁移至GitHub
查看>>
内存利用率
查看>>
JRuby 1.7.0 发布:默认使用Rudy1.9 模式,并可使用InvokeDynamic
查看>>
Mozilla 发布 Shumway —— 纯JS的SWF解析器
查看>>
Jolokia 1.0.6 发布, JMX远程访问方法
查看>>
小豆苗疫苗辅助搜索
查看>>
70个非常酷和时尚的iOS应用程序图标
查看>>
linux命令学习7-jstat命令
查看>>
魔术变量
查看>>
delphi 各新版本特性收集
查看>>