提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
在进行窗体的创建中,需要用到一些新的知识,如package,import以及窗体创建相关知识
一、package是什么,能做什么
包是什么
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
包的作用
1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
(https://www.runoob.com/java/java-package.html)
在同一个包中的类可以直接使用
public class A{
public void N{
System.out.println("这是A中的方法");
}
}
public class B{
public static void M(){
A.N();
}
}
如果两个代码不在同一个包中,可以使用"import 包名.类名"的形式来导入另一个主类,然后还是通过新建对象的方式使用主类的方法等。
如本次使用的package
import javax.swing.*;
import java.awt.*;
二、窗体创建相关
1.创建窗体
首先要创建一个窗体,需要引入一个包
import javax.swing.JFrame;
之后想想一个窗体需要哪些基本属性?
标题、大小、点击隐藏\销毁释放\退出、以及可视化等
public void showUI(){
//创建一个窗体对象
JFrame jf = new JFrame();
//标题
jf.setTitle("注册窗口");
//大小
jf.setSize(450,900);
//关闭窗口
jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
//可视化
jf.setVisible (true);
}
在创建窗体生成的方法后,可以调用写好的方法看看效果怎么样。
public static void main(String[] args){
LoginUI loginui = new LoginUI ();
loginui.showUI ();
}
2.添加组件
窗体创建好了,但是里面还是一片空白,这就需要我们在其中添加一些组件。
首先,要设置窗体的布局管理器。
什么是布局管理器?
关于布局管理器,在Swing中,每个组件都有一个具体的位置和大小,而在容器中真正去摆放这些组件时其实是很难判断其具体位置和大小的,布局管理器就提供了一种对swing组件的排版方式,因此使用布局管理器就可以很有效的处理整个窗体中组件的布局方式,Swing提供的常用的布局管理器有四种:绝对布局管理器、流布局管理器、边界布局管理器、网格布局管理器。
绝对布局管理器 (AbsolutelyLayout)
使用绝对布局时首先有一点需要注意:就是要先取消默认布局管理器,方法为:
setLayout(null); //清空布局管理器,即取消原来的边界布局管理器
之后再使用以下方法对组件进行绝对定位:
setBounds(x,y,width,height);
//其中x表示组件基于容器左上角的横坐标、y表示纵坐标,width表示组件的宽,height表示组件的高
流布局管理器 (FlowLayout)
流布局管理器(FlowLayout)具有的特点就是:在其中的组件可以像“流”一样按照从左到右的顺序依次的排列,直到该行排列完毕后再从下一行继续排列。在默认的情况下,组将在流布局管理器中都是以居中排列的,当然排列的顺序是可以改变的,
边界布局管理器(BorderLayout)
在默认不指定窗体布局的情况下,Swing组件的布局模式就是边界布局(BorderLayout),该布局管理器的特征就是组件会按照一定要求布满整个容器的边界,
边界布局管理器可以将容器划分成东、南、西、北、中五个区域,在容器中添加组件时,我们可以设置组将放入到哪一个区域中,关于区域的控制可以使用BorderLayout类中的成员方法来确定
网格布局管理器(GridLayout)
网格布局管理器(GridLayout)从字面意思就可以理解,就是将容器按照行列划分成特定的网格,在网格布局管理器中每一个网格的大小都是一样的,并且网格中格子的个数是由划分的行和列决定的,如一个两行两列的网格布局,将会划分成四个大小相同的网格。
在网格布局中的组将会按照从左到右、从上到下的顺序加入到网格中,而且加入到网格中的组件都会将网格填满,同时改变窗体的大小,网格的大小也会随之改变。
https://cloud.tencent.com/developer/article/1702758
我这里用的是流式布局管理器
FlowLayout flow = new FlowLayout ();
jf.setLayout (flow);
添加组件
常用的组件有按钮、输入框、密码框、标签、图片、单选\复选框等,这些组件需要引入JFrame。
import javax.swing.JFrame;
之后就是组件的添加
//添加按钮
JButton bt= new JButton("点击注册");
//添加输入框
JTextField nameInput = new JTextField ();
JTextField locInput = new JTextField ();
//添加密码框,输入的内容变成*号
JPasswordField pwdInput = new JPasswordField ();
//单选框,把选项添加进ButtonGroup中
JRadioButton c1 = new JRadioButton("男");
JRadioButton c2 = new JRadioButton("女");
ButtonGroup btnGroup = new ButtonGroup();
btnGroup.add(c1);
btnGroup.add(c2);
//复选框
JCheckBox ch1= new JCheckBox("记住密码");
JCheckBox ch2= new JCheckBox("自动登录");
//添加图片
ImageIcon img = new ImageIcon("C:\\Users\\Lenovo\\Pictures\\QQ图片20211110115458.jpg");
//添加标签
JLabel nameLabel = new JLabel ("账号:");
JLabel pwdLabel = new JLabel ("密码:");
JLabel gedLabel = new JLabel ("性别:");
JLabel locLabel = new JLabel ("地址:");
JLabel imgLabel = new JLabel (img);
对于输入框,需要设置大小
使用Dimension
Dimension dim = new Dimension (400,30);
nameInput.setPreferredSize (dim);
locInput.setPreferredSize (dim);
pwdInput.setPreferredSize (dim);
将组件放入窗体
只需要.add添加即可
jf.add (imgLabel);
jf.add (nameLabel);
jf.add (nameInput);
jf.add (pwdLabel);
jf.add (pwdInput);
jf.add (gedLabel);
jf.add (c1);
jf.add (c2);
jf.add (locLabel);
jf.add (locInput);
jf.add (ageLabel);
jf.add (ch1);
jf.add (ch2);
jf.add (bt);
最后调用方法
public static void main(String[] args){
MyloginUI loginUI= new MyloginUI();
loginUI.showUI();
}
需要注意的地方
可视化要放在方法的最后面,前面的内容完成之后再显示。
总结
完整代码如下
package ui;
import javax.swing.*;
import java.awt.*;
class MyloginUI {
//方法(显示窗体)
void showUI(){
JFrame jf= new JFrame();
FlowLayout flow = new FlowLayout ();
JButton bt= new JButton("点击注册");
JTextField nameInput = new JTextField ();
JTextField locInput = new JTextField ();
JPasswordField pwdInput = new JPasswordField ();
JRadioButton c1 = new JRadioButton("男");
JRadioButton c2 = new JRadioButton("女");
ButtonGroup btnGroup = new ButtonGroup();
btnGroup.add(c1);
btnGroup.add(c2);
JCheckBox ch1= new JCheckBox("记住密码");
JCheckBox ch2= new JCheckBox("自动登录");
ImageIcon img = new ImageIcon("C:\\Users\\Lenovo\\Pictures\\QQ图片20211110115458.jpg");
JLabel nameLabel = new JLabel ("账号:");
JLabel pwdLabel = new JLabel ("密码:");
JLabel gedLabel = new JLabel ("性别:");
JLabel locLabel = new JLabel ("地址:");
JLabel imgLabel = new JLabel (img);
Dimension dim = new Dimension (400,30);
nameInput.setPreferredSize (dim);
locInput.setPreferredSize (dim);
pwdInput.setPreferredSize (dim);
jf.setLayout (flow);
jf.add (imgLabel);
jf.add (nameLabel);
jf.add (nameInput);
jf.add (pwdLabel);
jf.add (pwdInput);
jf.add (gedLabel);
jf.add (c1);
jf.add (c2);
jf.add (locLabel);
jf.add (locInput);
jf.add (ch1);
jf.add (ch2);
jf.add (bt);
//标题
jf.setTitle("注册窗口");
//大小
jf.setSize(450,900);
//关闭窗口
jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
//可视化
jf.setVisible (true);
}
public static void main(String[] args){
MyloginUI loginUI= new MyloginUI();
loginUI.showUI();
}
}
实现窗体如下
谢谢观看