首页 > 编程语言 >Java图形化设计

Java图形化设计

时间:2022-12-05 17:48:05浏览次数:55  
标签:容器 Java 布局 按钮 组件 设计 图形化 panel

Java图形化设计

能够实现图形界面的类库:

java.awt

javax.swing

使用方法

同其他包使用方法一样

improt Java.awt.* ;

import javax.swing.* ;

关于两种类库的区别

java.awt 和 javax.swing,前者称为抽象窗口工具库 AWT(Abstract Windows Toolkit),后者是 Java 基础类库 JFC(Java Foundation Classes)的一个组成部分,它提供了一套功能更强、数量更多、更美观的图形用户界面组件。Swing 组件名称和 AWT 组件名称基本相同,但以 J 开头,例如 AWT 按钮类的名称是 Button,在 Swing 中的名称则是 JButton。

在 java 中,AWT 包中的类是用 来处理图形的最基本的方式,它是 Sun 公司早期所推出和使用的图形组件包,其中的组件包含基本 GUI 组件类、容器类、布局管理类,事件处理类和基本图形类这五种。AWT 包中的组件被认为是重量级组件, AWT 在实际运行中是调用所在平台的图形系统,它们依赖于本地系统来支持绘图与显示,其运行速度慢效果差,系统相关性较强。在 1998 年 Sun Microsystem 推出 JDK1.2 版本时,新的 javax.Swing 包被增加 到 java 的基础类库中。

Swing 包可以认为是 AWT 包的升级。它不仅拥有几倍于 AWT 包的用户界面组件, 而且同样的组件,Swing 包中的组件往往可设置属性更多,功能更强大丰富。例如 Swing 包中按钮(Button) 的功能较 AWT 包中的按钮功能更加强大,包括给按钮添加图像、使用快捷键以及设置按钮的对齐方式, 还可以给按钮加入图片做背景。

Swing 采用 MVC(模型-视图-控制)的设计范式,使程序员可以根据不同的操作系统来选择不同的外观。 Swing 组件完全是用 Java 代码实现的,可以跨平台,使用 Swing 组件的程序在 Mac、Windows 或 Unix 平 台上的观感都一样。Swing 组件通常被称为轻量级组件。程序设计过程中最好不要混用 Swing 组件和 AWT 组件,虽然有时候也可以同时用,但有可能在视觉效果和响应上造成不稳定隐患。

容器和布局:

界面是需要有载体的。而“容器”是所有组件或容器的载体,是图形用户界面设计的基础。图形用 户界面上所有的元素都要装载在容器中。容器其实就是 Java 图形界面开发包中的系统类,它们只是一类 比较特殊的图形组件。它们在数量上基本上就只有几个。

设计界面时,先要定义“容器”对象作为载体, 然后定义按钮、输入框之类的普通图形界面组件对象,把这些组件对象添加(调用容器对象的 add 方法) 到容器上,才能构成界面。而这些组件放到容器上去之后,按什么样的格局、什么样的顺序摆放,属于 容器的“布局”问题。

“布局”是对容器而言的,是对放置到容器内的组件的一种位置的约束。给任何一 种容器对象设置布局的方法都是调用该容器对象的 setLayout 方法,该方法需要带相应的布局类对象作 为参数。然后普通组件就会被按照这种布局参数放到容器上显示了。布局常用的有五六种。

容器:

容器一般分为三类:顶层容器,中间层容器,其他基本组件

以Swing包举例:

顶层容器:JFrame、JApplet、JDialog。

中间层容器:JPanel、JScrollPane、JSplitPane、JToolBar。

其它基本组件:JButton、JList、JTextField 等。

关于JFrame、JApplet、JDialog

JFrame 是窗体,例如一般的windows窗口

JApplet 是可以嵌在浏览器中显示

JDialog 弹框窗体组件,多用于信息提示,没有最大化最小化按钮,并且可以设置没有关闭按钮

package test_4;
import javax.swing.JFrame;
public class ABCDE{
	public static void main(String[] args) {
//		JFrame jf = new JFrame();
//		jf.setTitle("一拳打爆Java");
		JFrame jf = new JFrame("一拳打爆Java");		//这一行等同于上面两行
		jf.setSize(400,400);	//设置大小
		jf.setVisible(true);	//没有此行运行程序无法看见
	}
}

image-20221205133025255

布局:

  • FlowLayout 布局:顺序布局,有时又称流式布局。使用该布局时,容器上的元素会按容器显示 时的大小,按照从左到右、从上倒下的一行一行摆放下去。

  • BorderLayout 布局:边界布局。它可以把容器分为东西南北中 5 个方位,可以指定某个组件在 哪个方位(但注意并非一定要有 5 个组件摆上去,不足 5 个也可指定位置摆放)。

  • GridLayout 布局:网格布局。可以指定容器上的元素按几行几列的位置顺序摆放。

  • CardLayout 布局:卡片布局。使用该布局的容器可放置多个组件,但同一时刻只能显示其中一 个,就像一叠叠整齐的纸牌中每次只能最上面一张一样。可以指定哪个组件被显示。

  • null 布局:空布局。空布局并非没有布局,而是容器被设置为这种布局以后,放到它上面的每 个组件就可以通过 setBounds(int a,int b,int width,int height)来设置其具体的位置。

  • 另外还有 BoxLayout(盒式布局)、GridBagLayout(网格包布局)等不常用布局。

在具体的程序设计时,上述每一种布局都对应是一个类,用它们定义出来的对象作为容器对象的 setLayout 方法的参数,就可以把容器设置成该参数所对应的布局了。

干货:

(在学习这个之前需要一点简单的 Java 基础)

想用Java进行图形化设计,首先引入类库,下面我引入了四个我完成实验时用到的库

import java.awt.Color;					//可以用于更改颜色
import java.awt.Font;					//可以用于更改字体
import java.awt.event.*;			   //用于按钮的事件,即给按钮添加一些功能
import javax.swing.*;					//最主要的,进行图形化设计的库

首先应该创建一个窗体,就我们平时所看见的windows窗口,在自己的类里面或者主函数里面写

然后我们可以开始调整窗口的大小

//名称“计算器”会显示在窗口的左上角
JFrame jf = new JFrame("计算器");

//设置窗口大小,我设置的是长300宽400
jf.setSize(300,400);

//此行代码不可删,有此行代码后在点击窗口右上角的×时才会真正关闭程序
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//此行代码不可删,如果没有此行代码运行程序是不会看见你的窗口
jf.setVisible(true);	

//此行代码自由选择,为false时运行代码生成的窗口是无法通过拖拽扩大或者缩小窗口,没有此行代码时会默认为true
jf.setResizable(false); 	


在你的类中写完上面的代码后可以运行一下试试应该是可以看见你创建的窗口了

按照我个人的习惯我会在创建的窗口后添加一个 Panel(画布) 在画布上进行设计布局,你也可以不创建panel,后面步骤仍然可以正常使用(前提有一定 Java 基础更改相应代码)

panel 会显示在上面创建的 jf 的上方,所以我的颜色更改选择是更改 panel 的颜色,而不是更改 jf 的

//创建panel
JPanel panel = new JPanel();

//更改 panel 背景颜色(记得我们引入了 java.awt.Color 库吗,有了这个才可以进行颜色的更改)
//这个Color(R,G,B)可以按自己喜好的颜色更改,前提是了解这个东西,我这里设置的一个浅蓝色
panel.setBackground(new Color(175,238,238));

//我不想使用已有的布局进行更改,想自己自定义一个布局,设置每个按钮或者文本的位置,所以必须要此行代码让 panel 的布局默认是空的
panel.setLayout(null);

效果图:

image-20221205164506948

之后可以根据自己的想法在 panel 上添加对应的文本,按钮,或者输入框等

JLabel ---------文本

JTextFIeld---------空白的输入框

JButton---------按钮

JPasswordField---------一个隐藏输入内容的输入框,就像平时我们登录某些App输入密码不会显示数字而是 ***


开造!!!

我在类的最前面创建了一个静态的字体,方便更改我所有文本中出现的字体

前提是我们引入了字体的库 java.awt.Font

// 问藏书房是我电脑本地拥有的字体(我之前下载的比较喜欢的字体),可以查看你电脑本地的字体有哪些自行更改
// Font.PlAIN是字体类型中正常的类型,还有粗体斜体等
// 18是字体的大小
Font f1 = new Font("问藏书房",Font.PLAIN,18);

这是我字体的样式可以看看

image-20221205165601388

创建了一个文本显示在 panel 上

//创建了一个文本显示我需要的文字 "第一个数"
JLabel lb1 = new JLabel("第一个数");

/*将文字添加到我的 panel ,运行就可以发现文字会显示在 panel 上方 
!创建了文字按钮等组件先添加! 
!创建了文字按钮等组件先添加! 
!创建了文字按钮等组件先添加!
重要的事情说三遍!!!否则会导致你窗口内的东西没有正常显示
添加之后再来按需求更改
*/
panel.add(lb1);

//设置文本的在你的窗口中的位置,窗口前面创建的是 300 * 400 
//setBounds(x, y, width, height) x 和 y 指定左上角的新位置,由 width 和 height 指定新的大小
lb1.setBounds(10,20,60,25);

//更改文本的字体,f1 是上面已经创建好了的文字
lb1.setFont(f1);

创建了一个空白的输入框显示在 panel 上

//创建框,一会在后面的括号设置20(20列)可以自行深入了解,这个也可以不输入设置为空
JTextField number1 = new JTextField(20);

//添加到 panel
panel.add(number1);

//设置位置以及大小
number1.setBounds(100,20,100,25);

效果图:

image-20221205170747067


起飞!!!

可以自行根据上面的步骤创建三个文本框和输入框,分别是第一个数,第二个数,结果,下面我说一下如何使用按钮并且设计到监听以及事件功能,输入框的变量名按照从上往下依次为 number1 , number2 , number3

创建一个加法的按钮

//创建按钮
JButton b1 = new JButton("加");

//添加
panel.add(b1);

//设置大小位置
b1.setBounds(10,140,50,30);

//更改字体
b1.setFont(f1);

//添加监听
b1.addActionListener(new ActionListener() {
    //添加事件行为
	public void actionPerformed(ActionEvent e) {
        //获取输入框 number1 中的文档转化为字符串
		String s1 = number1.getText();
        
         //获取输入框 number2 中的文档转化为字符串
		String s2 = number2.getText();
        
        //将两个字符串转换成double类型,便于计算
		Double num1 = Double.valueOf(s1);
		Double num2 = Double.valueOf(s2);
        
        //将 num1 的值和 num2 的值加起来并且转换成字符串类型赋值给s3
		String s3 = String.valueOf(num1+num2);
        
        //将字符串s3中的字符传给number3显示最终结果
		number3.setText(s3);
	}
});

这样,一个计算器简单的加法就做好了,输入1和3,按下“加”按钮获得结果

image-20221205171940104

接下来可以根据个人需求更改

下面是完整计算器源码 仅供参考

https://github.com/Shadow-Fy/Recycle-Box/blob/main/Java/Computer.java


本博客是个人根据所学知识所写,如有错误希望可以在评论指出,便于及时更改

标签:容器,Java,布局,按钮,组件,设计,图形化,panel
From: https://www.cnblogs.com/shadow-fy/p/16952961.html

相关文章

  • java判断字符串是否为数字或中文或字母
     java判断字符串是否为数字或中文或字母1.判断字符串是否仅为数字:1、用JAVA自带的函数public static boolean isNumeric(String str){  for (int i = str......
  • 推荐 10个非常好用的 JavaScript 动画库!!!
    1.Tween.jsTweenJS 是一个简单的 JavaScript 补间动画库。能够很好的和 EaselJS 库集成,但也不依赖或特定于它。它支持渐变的数字对象属性和 CSS 样式属性。AP......
  • java对接webservice服务实现推送
    【背景】  前不久接到一个任务需要将我们平台的内容推送到第三方的一个webService服务中,我们平台接口使用java来做的,所以需要通过java调用webService服务实现推送效果,不......
  • 【设计模式】——你真的会单例吗?
    【简介】单例模式,属于创建类型的一种常用的​​软件设计​​模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文......
  • JAVA解决并发问题
    解决并发问题 解决可见性,有序性,原子性原子性 Java内存模型只保证了基本读取和赋值是原子性操作,如果要实现更大范围操作的原子性,可以通过synchronized和Lock来实现。......
  • [笔记]java分析内存
    分析内存1.jmap_dump2.下载地址https://www.ej-technologies.com/download/jprofiler/files2.1JVM启动参数-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=D:\heap......
  • 【转载】详解mysql插入数据后返回自增ID的七种方法_java
    引言mysql和oracle插入的时候有一个很大的区别是:oracle支持序列做id;mysql本身有一个列可以做自增长字段。mysql在插入一条数据后,如何能获得到这个自增id的......
  • Java学习系列:package-info.java的作用
    场景学习​​spring-kafka​​​开源源码的时候,发现每个目录都有一个​​package-info.java​​文件,查找其用法,并整理出来。环境软件版本spring-boot2.1.8.RELEASEspring-ka......
  • 【基础知识】——java集合
    一、背景最近在刷力扣算法题的过程中对于java集合的定义及使用想要达到更加精准的程度,于是有了本次的总结二、目标宏观总结:绘制java集合类图微观:写每个集合常用的代码实现......
  • 基于Kotlin和Canvas的跨中端设计
    背景js弱类型非常混乱,不适合开发超过2w行代码的独立应用(普通Web除外)Web端和桌面端是主流工具应用的生存地Canvas又是一个新兴的领域,能够提供多种多样的工具支持设计一......