Swing登陆界面开发
一、Java的图形界面
Swing为Java图形界面提供各种组件,像菜单栏、输入框、按钮等等。
Swing调用组件基本格式:
javax.swing.XXXX
二、常用的组件
1)容器组件:
(1)窗体类JFrame
例如: javax.swing.JFrame frame=new javax.swing.JFrame();
还可以这样 JFrame frame=new JFrame(); 然后按shift+ctrl+o
(2)面板类JPanel
例如: JPanel panel=new JPanel();
(3)菜单栏JMenuBar
例如:JMenuBar jm=new JMenubar();
2)元素组件
(1)标签类JLabel
例如: JLabel jla=new JLabel();
标签中可以显示图片
例如: ImageIcon image=new ImageIcon(“images/1.jpg”);
JLabel jla=new JLabel(image);
(2)按钮类JButton
例如: JButton jb=JButton(“开始”);
(3)输入框类JTextField
例如: JTextField te=new JTextField();
(4)密码输入框类 JPasswordField
例如: JPasswordField jp=new JPasswordField();
(5)下拉框类JComboBox
例如: JComboBox jc=new JComboBox();
(6)复选框类JCheckBox
例如: JCheckBox jc=new JCheckBox();
(7)菜单类JMenuItem
例如: JMenuItem jm=new JMenuItem();
三、常用的布局
(1)边框布局BorderLayout (默认)
将容器分为东西南北中五部分,每部分又可独自添加容器。
例如: BorderLayout bo=new BorderLayout();
frame.setLayut(bo);
frame.add(panel,BorderLayout.WEST);
(2)流式布局FlowLayout
默认从中见对齐往两边扩散,直至一行满了转到下一行
例如: FlowLayout fl=new FlowLayout(FlowLayout RIGHT);
frame.setLayout(fl);
(3)网格布局GridLayout
例如:GridLayout gr=new GridLayout(4,5); 四行五列
所有以Layout结尾的类都是布局类。
(4)绝对布局 Dimension
可精确设置各组件大小
例如: panel.setPerferredSize(new Dimension(500,200));
四、界面实现
实现界面的步骤:
1.定义类,在类中定义主函数和初始化界面的方法.
2.在初始化界面的方法中,实例化一个JFrame窗体类的对象.
3.设置窗体对象的属性值
4.实例化布局对象并且设置窗体容器的布局方式.
5.实例化对象容器或者元素组件的对象,让后将对象添加到窗体上.
6.在主函数中实例化类的对象,然后调用初始化界面的方法
一种布局往往难以实现设计要求,所以要灵活运用整体的布局和各容器的布局。
课后实践 1.QQ2012登陆界面
2.计算器界面
源代码:
QQ登陆界面:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Login {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//实例化一个对象
Login log=new Login();
//调用显示窗体的方法
log.showFrame();
}
//定义显示窗体的方法
public void showFrame(){
//实例化一个窗体对象
JFrame frame=new JFrame();
//设置窗体的属性
frame.setTitle("QQ2012");//设置窗体标题
frame.setSize(380,280);//设置窗体大小
frame.setLocation(300,300);//设置窗体显示位置
frame.setDefaultCloseOperation(3);//设置默认关闭操作3关闭窗口时退出程序
frame.setResizable(false);//设置不能改变窗体大小
//实例化一个图像对象
ImageIcon background=new ImageIcon("images/2.jpg");
//实例化一个标签对象
JLabel lab=new JLabel(background);
//设置标签显示位置和大小
lab.setBounds(0, 0,background.getIconWidth(), background.getIconHeight());
//将标签添加到JLayeredPane的底层
frame.getLayeredPane().add(lab,new Integer(Integer.MIN_VALUE));
//获取ContentPane对象
JPanel contentPane=(JPanel)frame.getContentPane();
//设置contentPane为透明
contentPane.setOpaque(false);
//默认为边框布局,这两行可省略
//BorderLayout bo=new BorderLayout();
//frame.setLayout(bo);
//实例化一个西部面板对象
JPanel westPane=westPane();
//添加西部面板至边框西部
frame.add(westPane,BorderLayout.WEST);
//实例化一个中部面板对象
JPanel centerPane=centerPane();
//添加中部面板至边框中部
frame.add(centerPane,BorderLayout.CENTER);
//实例化一个南部面板对象
JPanel southPane=southPane();
//添加南部面板至边框南部
frame.add(southPane,BorderLayout.SOUTH);
//实例化一个北部面板对象
JPanel northPane=northPane();
//添加北部面板至边框北部
frame.add(northPane,BorderLayout.NORTH);
//设置窗体可见
frame.setVisible(true);
}
//定义一个创建西部面板的方法,返回值为面板
public JPanel westPane(){
//实例化一个面板对象
JPanel panel=new JPanel();
//设置面板透明
panel.setOpaque(false);
//设置面板大小,西部面板只能设置宽度
panel.setPreferredSize(new Dimension(105,0));//使用绝对布局设置面板大小
//实例化一个流布局对象并使其为右对齐
FlowLayout fl=new FlowLayout(FlowLayout.RIGHT);
panel.setLayout(fl);//设置面板为流布局
//实例化一个图标对象
ImageIcon image=new ImageIcon("images/1.jpg");//将图片添加到图片对象
//实例化一个标签对象
JLabel jla=new JLabel(image);//将图标放入标签
//将标签添加到面板
panel.add(jla);
//返回一个面板值
return(panel);
}
//定义一个创建中部面板的方法,返回值为面板
public JPanel centerPane(){
//实例化一个面板对象
JPanel panel=new JPanel();
//设置面板透明
panel.setOpaque(false);
//实例化一个流布局对象并使其左对齐
FlowLayout fl=new FlowLayout(FlowLayout.LEFT);
panel.setLayout(fl);//设置面板布局为流布局
//实例化一个下拉框对象
JComboBox jcb=new JComboBox();
jcb.addItem("522517457");//添加选择内容
jcb.setEditable(true);//设置可编辑
jcb.setPreferredSize(new Dimension(192,25));//设置大小,用绝对布局精确设置大小
panel.add(jcb);//添加下拉框组件至面板
//实例化一个标签对象
JLabel jla=new JLabel("注册账号");
panel.add(jla);//添加标签至面板
//实例化一个输入框对象
JTextField jte=new JTextField();
jte.setPreferredSize(new Dimension(192,25));//设置大小,用绝对布局精确设置大小
panel.add(jte);//添加输入框至面板
//实例化一个标签
JLabel jla1=new JLabel("找回密码");
panel.add(jla1);//添加标签纸面板
//实例化两个复选框
JCheckBox jche=new JCheckBox("记住密码");
JCheckBox jche1=new JCheckBox("自动登录");
jche.setOpaque(false);//设置复选框为透明
jche1.setOpaque(false);//设置复选框为透明
panel.add(jche);//添加复选框至面板
panel.add(jche1);//添加复选框至面板
//返回面板值
return(panel);
}
//定义一个创建南部面板的方法,返回值为面板
public JPanel southPane(){
//实例化一个面板对象
JPanel panel=new JPanel();
//设置面板为透明
panel.setOpaque(false);
//实例化一个流布局对象
FlowLayout fl=new FlowLayout();
panel.setLayout(fl);//设置面板布局为流布局
//实例化一个按钮对象
JButton jb=new JButton("登 陆");
panel.add(jb);//添加按钮至面板
//返回面板
return(panel);
}
//定义一个创建背部面板的方法,返回值为面板
public JPanel northPane(){
//实例化一个面板对象
JPanel panel=new JPanel();
//设置面透明
panel.setOpaque(false);
//设置面板大小
panel.setPreferredSize(new Dimension(0,100));//使用绝对布局设置面板大小
//返回面板
return(panel);
}
}
计算器界面:
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calculator {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//实例化一个计算器对象
Calculator cal=new Calculator();
cal.showFrame();//调用显示界面的方法
}
public void showFrame(){
//实例化一个窗体对象
JFrame frame=new JFrame();
//设置窗体属性
frame.setTitle("计算器");//设置窗体标题
frame.setSize(490, 295);//设置窗体大小
frame.setLocation(300, 300);//设置窗体显示的位置
frame.setResizable(false);//设置不可改变窗体大小
frame.setDefaultCloseOperation(3);//设置关闭窗口时程序退出
//JFrame默认BorderLayout边框布局
//实例化一个北部面板
JPanel northPane=northPane();
//添加到边框布局的北部
frame.add(northPane,BorderLayout.NORTH);
//实例化一个西部面板
JPanel westPane=westPane();
//添加到边框布局的西部
frame.add(westPane,BorderLayout.WEST);
//实例化一个中部面板
JPanel centerPane=centerPane();
//添加到边框布局的中部
frame.add(centerPane,BorderLayout.CENTER);
//实例化一个东部面板
JPanel eastPane=eastPane();
//添加到边框布局的西部
frame.add(eastPane,BorderLayout.EAST);
//设置窗体为可见
frame.setVisible(true);
}
//定义一个创建北部面板的方法,返回值为面板类
public JPanel northPane(){
//实例化一个面板
JPanel panel=new JPanel();
//实例化一个流布局对象
FlowLayout fl=new FlowLayout();
panel.setLayout(fl);//设置面板为流布局
//实例化一个输入框对象
JTextField jte=new JTextField();
jte.setPreferredSize(new Dimension(455,45));//使用绝对布局设置输入框大小
panel.add(jte);//添加输入框至面板
//返回面板
return(panel);
}
//定义一个创建西部面板的方法,返回值为面板类
public JPanel westPane(){
//实例化一个面板对象
JPanel panel=new JPanel();
//设置面板大小
panel.setPreferredSize(new Dimension(140,0));
//实例化一个网格布局对象
GridLayout gr=new GridLayout(5,2);
panel.setLayout(gr);//设置面板为网格布局
//添加各种按钮
panel.add(new Button("sin"));
panel.add(new Button("ln"));
panel.add(new Button("cos"));
panel.add(new Button("log"));
panel.add(new Button("tan"));
panel.add(new Button("e"));
panel.add(new Button("π"));
panel.add(new Button("^"));
panel.add(new Button("!"));
panel.add(new Button("√"));
//返回面板
return(panel);
}
//定义一个创建中部面板的方法,返回值为面板类
public JPanel centerPane(){
//实例化一个面板对象
JPanel panel=new JPanel();
//实例化一个网格布局的对象
GridLayout gr=new GridLayout(4,5);//四行五列
panel.setLayout(gr);//设置为网格布局
//添加各种按钮
panel.add(new Button("7"));
panel.add(new Button("8"));
panel.add(new Button("9"));
panel.add(new Button("÷"));
panel.add(new Button("←"));
panel.add(new Button("4"));
panel.add(new Button("5"));
panel.add(new Button("6"));
panel.add(new Button("×"));
panel.add(new Button("("));
panel.add(new Button("1"));
panel.add(new Button("2"));
panel.add(new Button("3"));
panel.add(new Button("-"));
panel.add(new Button(")"));
panel.add(new Button("0"));
panel.add(new Button("00"));
panel.add(new Button("."));
panel.add(new Button("+"));
panel.add(new Button("="));
//返回面板
return(panel);
}
//定义一个创建栋部面板的方法,返回值为面板类
public JPanel eastPane(){
//实例化一个面板对象
JPanel panel=new JPanel();
//设置面板大小
panel.setPreferredSize(new Dimension(10,0));
//返回面板
return(panel);
}
}