第五次学时总结
第五次课时总结
这节课的内容是登陆界面的开发,java中的图形界面有两种awt和swing。下面先来介绍一下界面开发过程中的经常用到的一些组件。
(1)容器类组件:
JFrame:窗体类。
JPanel: 面板类
JMenuBar:菜单栏
JMenu: 菜单项
(2)元素组件:
JLabel:标签类
JButton:按钮类
JTextField:文本框
JPasswordField:密码输入框
JComboBox:下拉文本框
JCheckBox:复选框
JMenuItem:菜单
下面在介绍一下常用的布局方式:
BorderLayout:边框布局
FlowLayout:流式布局
GirdLayout:表格布局
边框布局:界面被分为东、西、南、北、中五个部分,其中北和南两个部分宽度是不可变的仅高度可以改变,东和西仅宽度可以改变高度不可以改变。当然如果一个界面采用边框布局的方式,五个部分可以不都出现,其他未出现的部分会被中间部分自动充满。
流式布局:组件从左到右依次排列,知道写满一行,写满后自动跳转到下一行。
当然开发一个界面的时候可以用到多个布局方式,但要注意的是一个容器只可以存在一种布局方式。在java中,JFrame默认的是边框布局的方式,JPanel默认的是流式布局。
开发一个界面的一般步骤:
1.定义类,在类中定义主函数和初始化界面的方法.
2.在初始化界面的方法中,实例化一个JFrame窗体类的对象.
3.设置窗体对象的属性值
4.实例化布局对象并且设置窗体容器的布局方式.
5.实例化对象容器或者元素组件的对象,让后将对象添加到窗体上.
6.在主函数中实例化类的对象,然后调用初始化界面的方法
下面介绍一下我在练习中遇到的问题以及解决办法:
在做QQ登陆界面的时候,我先采用的布局方式是流式布局,但我发现随着窗体大小的改变组件在界面上的位置会发生明显的变化,这不是我想要的结果,最后我才用了一种不同于以上三种布局方式的布局方式——绝对布局。首先调用setLayout(null);方法设置布局方式为绝对布局,然后调用setBounds();方法来设置组件的起始位置、高度和宽度。例如如下代码:
//设置窗体的布局方式 绝对布局方式 jf.setLayout(null); //创建一个标签元素 ImageIcon image = new ImageIcon("u=2998989523,1930523640&fm=0&gp=0.jpg"); JLabel jl = new JLabel(image); jl.setBounds(new Rectangle(20,90,80,80));
在做计算机界面时发现一开始的输入框高度太矮,但在调用setSize();方法修改其大小时并没有起到作用。这是因为系统在重绘时又将其初始化为原来的初始值。解决方法是调用setPreferredSize();方法。例如如下代码:
//创建布局方式 java.awt.BorderLayout b1 = new java.awt.BorderLayout(5,5); //创建一个文本框 javax.swing.JTextField j = new javax.swing.JTextField(); //将这个组件放到北面 jf.add(j,BorderLayout.NORTH); //设置文本框的高度 j.setPreferredSize(new Dimension(0, 50));
其他相关方法详见API文档,习题源代码如下:
QQ界面
package three0709;
package three0709; import java.awt.*; import javax.swing.*; public class Login { public static void main(String[] args) { //实例化一个Login类的对象 Login l1 = new Login(); //调用界面初始化方法 l1.init(); } public void init(){ //实例化一个JFrame类的对象 javax.swing.JFrame jf = new javax.swing.JFrame(); //设置对象的属性值 jf.setSize(380,290);//设置对象的大小 jf.setTitle("QQ");//设置对象的标题 jf.setLocation(100,100);//设置对象的起始位置 jf.setDefaultCloseOperation(3);//设置窗体关闭时退出程序 jf.setResizable(false);//设置禁止改变窗体大小 //实例化一个流式布局的对象 //设置窗体的布局方式 绝对布局方式 jf.setLayout(null); //创建一个标签元素 ImageIcon image = new ImageIcon("u=2998989523,1930523640&fm=0&gp=0.jpg"); JLabel jl = new JLabel(image); jl.setBounds(new Rectangle(20,90,80,80)); ImageIcon image2 = new ImageIcon("201011221051319214.jpg"); JLabel j2 = new JLabel(image2); j2.setBounds(0, 0,image2.getIconWidth(), image2.getIconHeight()); jf.getLayeredPane().add(j2, new Integer(Integer.MIN_VALUE)); JPanel contentPane = (JPanel)jf.getContentPane(); contentPane.setOpaque(false); //创建一个下拉文本框 javax.swing.JComboBox c_name = new javax.swing.JComboBox(); c_name.setEditable(true); c_name.setBounds(new Rectangle(120, 90, 150, 20)); //创建一个标签元素 注册 javax.swing.JLabel x_name = new javax.swing.JLabel("注册账号"); x_name.setBounds(new Rectangle(280, 90, 90, 20)); //创建一个密码文本框 javax.swing.JPasswordField p_name = new javax.swing.JPasswordField(10); p_name.setBounds(new Rectangle(120, 120, 150, 20)); //创建一个标签元素 找回密码 javax.swing.JLabel s_name = new javax.swing.JLabel("找回密码"); s_name.setBounds(new Rectangle(280, 120, 90, 20)); //创建一个复选框 javax.swing.JCheckBox F1 = new javax.swing.JCheckBox("记住密码",true); F1.setBounds(new Rectangle(120, 150, 80, 20)); F1.setOpaque(false); javax.swing.JCheckBox F2 = new javax.swing.JCheckBox("自动登录"); F2.setBounds(new Rectangle(220, 150, 120, 20)); F2.setOpaque(false); //创建一个按钮 JButton jbt = new JButton("登 陆"); jbt.setBounds(new Rectangle(120,200,150,30)); c_name.addItem(1796864392 ); c_name.addItem(654865620 ); c_name.addItem(654765620 ); //将组建加到窗体上 jf.add(jl); jf.add(c_name); jf.add(x_name); jf.add(p_name); jf.add(s_name); jf.add(F1); jf.add(F2); jf.add(jbt); //设置窗体可见 jf.setVisible(true); } }
计算机界面
package four0709; import java.awt.*; public class Cale { /** * @param args *///程序的入口 public static void main(String[] args) { // TODO 自动生成的方法存根 //实例化一个Cale类的对象 Cale c1 = new Cale(); //调用初始化界面的方法 c1.init(); } //定义一个初始化方法 public void init(){ //实例化一个JFrame类的对象 javax.swing.JFrame jf = new javax.swing.JFrame(); //设置对象的属性值 jf.setSize(200,200);//设置对象的大小 jf.setTitle("计算机");//设置对象的标题 jf.setLocation(100,100);//设置对象的起始位置 jf.setDefaultCloseOperation(3);//设置关闭窗体是退出程序 jf.setResizable(false);//设置禁止改变窗体大小 //创建布局方式 java.awt.BorderLayout b1 = new java.awt.BorderLayout(5,5); //创建一个文本框 javax.swing.JTextField j = new javax.swing.JTextField(); //将这个组件放到北面 jf.add(j,BorderLayout.NORTH); //设置文本框的高度 j.setPreferredSize(new Dimension(0, 50)); //设置一个面板 javax.swing.JPanel pc = new javax.swing.JPanel(); //设置面板的布局方式4行4列的表哥布局方式 pc.setLayout(new GridLayout(4,4,5,5)); //设置按钮组件 javax.swing.JButton [] jbts = new javax.swing.JButton[16]; String [] labels = new String[]{"7","8","9","+","4","5","6","-","1","2","3","*","0",".","=","/"}; for(int i = 0;i<jbts.length;i++){ javax.swing.JButton jbt = new javax.swing.JButton(labels[i]); pc.add(jbt); jf.add(pc,BorderLayout.CENTER); //设置窗体可见 jf.setVisible(true); } } }