小时候一直觉得网络是个很神奇的存在,跨时跨域跨平台、娱乐沟通查资料。可以做的真的太多太多。直到开始接触编程,开始接触Java,才慢慢发现,一个个小窗体的背后都源于代码的支撑。学习Swing界面开发,掌握Java提供的组件和布局API类,我们便可以尝试着做属于自己的扣扣登陆界面。
比较和分析界面类图形,显而易见,其共同特点便是,大窗体套小格子,小格子上加小方块,也就是说~想要做出一个美观的界面,首先要创建一个大的框架,再进行细节的雕琢。
那么在开始创建图形以前,我们先来介绍一下创建图形的基本知识。
1.jdk1.4时推出的Swing图形界面类中,JFrame和JPanel是两个常用容器组件。
Frame,也叫框架,它是由一个包括最大化、最小化、关闭和Frame名称所组成的一个框架运行界面。
Panel,也叫面板,将Panel添加在Frame上可以使得许多事情变得更容易解决。
需要注意的是,两个窗体类的对象不可以相互添加。
除此之外,Swing图形界面类中还包含许多元素组件,如:
JButton 按钮类
JLabel 标签类
JTextField 单行文本输入框类
JPasswordField 密码文本输入框类
JCheckBox 复选框类
JComboBox 下拉框类
实例化之后,便可以设置相应的属性,添加到大的框架当中。拿添加登陆按钮来说,
//先实例化一个JButton的对象jbu,令其显示“登陆”二字。
JButton jbu = new JButton("登陆");
//设置组件大小
jbu.setPreferredSize(new java.awt.Dimension(150,30));
//最后将JButton的对象jbu添加到窗体jf上
jf.add(jbu);
2.一个窗体上会出现很多元素,那么如何布局才能够使得界面更为美观实用便是一个值得思考的问题, 相应便需要引入布局的概念。在jdk1.4之前就推出了awt图形界面类,
此类中包含Java图形界面开发过程中常用的布局API类,如:
FlowLayout 流式布局类
BorderLayout 边框布局类(默认;添加组件是默认为添加在中央)
GridLayout 网格布局类
①流式布局类,是将组件流水似的摆放在Frame或其它构件上,从左到右,依次排放,碰到边界就重新另起行,顺序排放,整体置放在中心的位置。
②边界布局类,将板块分为东西南北中五个方向,每添加一个组件就要指定组件摆放的方位,放置在东西南北四个方向的组件将贴边放置。
③网格布局类,就是分几行几列将部件摆放到Frame上去,几个部件也是贴边放置的。
Frame的默认布局类型为边框布局类,Panel的默认布局类型为流式布局类。假如要将它转化成FlowLayout或者GridLayout甚至null的布局治理方式应该如何处理呢?java给我们提供了修改的方法。假设创建的Frame对象为f,那么将其修改成FlowLayout的方法就是f.setLayout(new FlowLayout()),而假如修改成null,则只需要写成f.setLayout(null)即可。
现在,让我们来着手做我们自己的图形界面吧!
首先要引入java.awt.*,这个包是基本的图形包,如Frame,Panel都在这个包中。
引用方法为:import java.awt.*;
接着要定义一个类,在类中定义主函数和初始化界面的initGUI()方法。
然后要在主函数中实例化类的对象,再调用initGUI方法。
接下来要在initGUI方法中实例化JFrame类的对象,同时设置JFrame类对象的属性值。
然后要给我们的容器设置布局方法
接着要实例化容器和元素组件,并将其添加到窗体上。
最后,在initGUI方法的最后一行添加窗体可见的方法。
import javax.swing.*;
//定义QQ登陆界面类
public class QQ {
//定义程序的入口主函数
public static void main(String [] args){
QQ q = new QQ();
q.initUI();
}
//定义初始化界面的方法
public void initUI(){
//实例化一个JFrame类的对象
JFrame jf = new JFrame();
//设置窗体的属性值
jf.setSize(400,300);
jf.setTitle("咱滴QQ!");
jf.setLocation(400,400);
jf.setDefaultCloseOperation(3);
jf.setResizable(false);
jf.setLayout(new java.awt.BorderLayout());//设置窗体的布局
//实例化一个JPanel的容器对象
JPanel panelWest = new JPanel();
panelWest.setLayout(new java.awt.FlowLayout());
JLabel jlaImage = new JLabel(new ImageIcon("1.jpg"));
panelWest.add(jlaImage);
//将panelWest容器对象添加到窗体的西边
jf.add(panelWest,java.awt.BorderLayout.WEST);
JLabel jlaImage0 = new JLabel(new ImageIcon("2.jpg"));
jf.add(jlaImage0,java.awt.BorderLayout.NORTH);
//实例化一个JPanel的容器对象
JPanel panelCenter = new JPanel();
panelCenter.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
JComboBox jcb = new JComboBox();
jcb.setPreferredSize(new java.awt.Dimension(185,27));//设置组件的大小
JButton jbuReg = new JButton("注册账号");
JPasswordField jpf = new JPasswordField();
jpf.setPreferredSize(new java.awt.Dimension(185,27));//设置组件的大小
JButton jbu = new JButton("找回密码");
JCheckBox jcb1 = new JCheckBox("记住密码");
JCheckBox jcb2 = new JCheckBox("自动登录");
panelCenter.add(jcb);
panelCenter.add(jbuReg);
panelCenter.add(jpf);
panelCenter.add(jbu);
panelCenter.add(jcb1);
panelCenter.add(jcb2);
//将panelWest容器对象添加到窗体的中央
jf.add(panelCenter,java.awt.BorderLayout.CENTER);
//实例化一个JPanel的容器对象
JPanel panelSouth = new JPanel();
panelSouth.setLayout(new java.awt.FlowLayout());
JButton btn = new JButton("登录");
//设置组件的大小
btn.setPreferredSize(new java.awt.Dimension(150,30));
panelSouth.add(btn);
//将panelWest容器对象添加到窗体的南边
jf.add(panelSouth,java.awt.BorderLayout.SOUTH);
jf.setVisible(true);
}
}
图形界面可以给人一个直观的视觉效应,自己在记事本中写的一行行枯燥的代码可以按照自己的想法指导图形的产生和分布,怎一个爽字了得呀\(^o^)/~