界面的容器包括窗体(JFrame)和面板(JPanel),一个界面有且只有一个窗体,面板是仅小于窗体的容器。
容器上面可以加各种组件,包括标签(JLabel),文本输入框(JTextField),复选框(JCheckBox),密码框(JPasswordField),按钮(JButton),下拉框(JComboBox)
菜单栏的添加 对象.setJMenuBar();实例化一个菜单栏,然后向上面添加菜单项以及在菜单项上添加菜单子项
容器上的组件必然是按照一定顺序排列起来的,不可能杂乱无章,所以就有了布局类,常用的有边框布局(BorderLayout),流式布局(FlowLayout),网格布局(GridLayout)
主要的方法举例:A a = new B();//实例化一个对象
a.set*****(***);//设置对象的属性
a.add(********);//向对象上加组件
所有的操作都可以概括为这几点,具体方法不必死记,需灵活应用。
下面是QQ登陆界面和计算器界面:
下面是源代码:
package cn.kml.login;
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.JLabel;
import javax.swing.JPanel;
/**
* 用于实现QQ登陆界面
* @author 陌陌
*/
public class QQLogin {
public static void main(String[] args) {
//实例化一个Login类对象
QQLogin log=new QQLogin();
//调用初始化界面的方法
log.initUI();
}
//定义一个初始化界面的方法
public void initUI(){
//实例化一个JFrame对象
javax.swing.JFrame jf = new javax.swing.JFrame();
//设置对象的属性
jf.setSize(381,290);
jf.setUndecorated(true);
jf.setLocationRelativeTo(null);
jf.setTitle("QQ登录界面");
// jf.setDefaultCloseOperation(3);
jf.setResizable(false);//设置窗体不可最大化
/*****************************设置窗体的背景*****************************************/
//实例化一个图标对象
ImageIcon background = new ImageIcon("images/background.png");
//实例化一个标签对象
JLabel jlb = new JLabel(background);
//设置标签的大小
jlb.setBounds(0,0, background.getIconWidth(), background.getIconHeight());
//将标签添加到LayeredPane的最底层
jf.getLayeredPane().add(jlb, new Integer(Integer.MIN_VALUE));
//将LayeredPane上一层的面板设置为透明
JPanel contentPanel = (JPanel)jf.getContentPane();
//设置面板为透明
contentPanel.setOpaque(false);
/******************************窗体的北边**********************************************/
//实例化一个面板对象
JPanel jpn=new JPanel();
jpn.setOpaque(false);//设置为透明
jpn.setPreferredSize(new Dimension(379,142));
//设置面的布局为流式布局,靠右显示
jpn.setLayout(new FlowLayout(FlowLayout.RIGHT,0,0));
//在面板上加上三个按钮
//添加三个图标对象
String[] button ={"images/set.png","images/min.png","images/close.png"};
String[] command = {"a","b","c"};
CloseListener clis = new CloseListener(jf,jpn);
for(int i=0;i<3;i++){
ImageIcon close = new ImageIcon(button[i]);
JButton buset = new JButton(close);
buset.setActionCommand(command[i]);
buset.setPreferredSize(new Dimension(27,17));
jpn.add(buset);
buset.addActionListener(clis);
}
jf.add(jpn,BorderLayout.NORTH);
/*****************************窗体的西边**********************************************/
//实例化一个面板对象
JPanel jpw=new JPanel();
jpw.setOpaque(false);
//设置版面的布局
jpw.setLayout(new FlowLayout(FlowLayout.RIGHT,15,3));
//实例化一个ImageIcon对象
ImageIcon im2=new ImageIcon("images/head.png");
//实例化一个便签对象,显示图标对象
JLabel jlw=new JLabel(im2);
jpw.add(jlw);
//把面板对象加到窗体的西边
jf.add(jpw,BorderLayout.WEST);
/******************************窗体的中间**********************************************/
//实例化一个面板对象
JPanel jpc=new JPanel();
jpc.setOpaque(false);
//设置面板的布局类型为流式布局类型,左边对齐
jpc.setLayout(new FlowLayout(FlowLayout.LEFT,20,5));
//实例化一个下拉框类的对象,显示已登录
javax.swing.JComboBox jc = new javax.swing.JComboBox();
jc.addItem("请输入QQ");
jc.addItem("758768990");
jc.addItem("655467677");
jc.addItem("65454343");
jc.setPreferredSize(new Dimension(164,24));
jc.setEditable(true);
jpc.add(jc);
//实例化一个标签对象,显示注册账号。
javax.swing.JLabel jl1 = new javax.swing.JLabel("注册账号");
jl1.setOpaque(false);
jpc.add(jl1);
//实例化一个下拉框类的对象,显示”请输入密码“
javax.swing.JPasswordField jc1 = new javax.swing.JPasswordField();
jc1.setPreferredSize(new Dimension(164,24));
jc1.setEditable(true);
jpc.add(jc1);
//实例化一个标签对象,显示找回密码
javax.swing.JLabel jl2 = new javax.swing.JLabel("找回密码");
jl2.setOpaque(false);
jpc.add(jl2);
//实例化两个复选框
JCheckBox jch1=new JCheckBox("记住密码");
JCheckBox jch2=new JCheckBox("自动登录");
jch1.setOpaque(false);
jch2.setOpaque(false);
jpc.add(jch1);
jpc.add(jch2);
jf.add(jpc,BorderLayout.CENTER);
/*********************窗体的南边********************************************/
//实例化一个面板对象
JPanel jpno=new JPanel();
jpno.setOpaque(false);
//实例化一个图标对象
ImageIcon login = new ImageIcon("images/login.png");
//实例化一个按钮类的对象,显示登陆。
JButton jb = new JButton(login);
jb.setPreferredSize(new Dimension(156,31));
jpno.add(jb);
jf.add(jpno,BorderLayout.SOUTH);
jf.setVisible(true);
//窗体可见之后,给关闭按钮添加一个监听器
}
}
package cn.kml.login;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class CloseListener implements ActionListener{
private JFrame jf;
private JPanel jpn;
public CloseListener(JFrame jf,JPanel jpn){
this.jf=jf;
this.jpn=jpn;
}
//重写
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("c")){
jf.setVisible(false);
}
}
}
package cn.kml.counter;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Counter {
public static void main(String[] args) {
//实例化一个Counter对象
Counter co=new Counter();
co.COUNT();
}
private Component jbu;
//初始化一个计算器界面
private int j;
private JButton jbut;
public void COUNT(){
//实例化一个JFrame对象
JFrame jf=new JFrame();
//设置对象的属性
jf.setSize(250,353);
jf.setTitle(" 计算器");
jf.setLocationRelativeTo(null);
//jf.setUndecorated(true);
jf.setDefaultCloseOperation(3);
jf.setResizable(false);
/*********************设置窗体的菜单栏**********************/
//实例化一个菜单栏对象
JMenuBar jm = new JMenuBar();
//实例化一个菜单项对象
JMenu jm1 = new JMenu("查看(V)");
//在菜单项中添加菜
JMenuItem jit = new JMenuItem("标准型(T)");
JMenuItem jis = new JMenuItem("科学型(S)");
jm1.add(jit);
jm1.add(jis);
jm.add(jm1);//添加到菜单栏中
JMenu jm2 = new JMenu("编辑(E)");
//在菜单项中添加菜单子项
JMenuItem jic = new JMenuItem("复制(C) Ctrl+C");
JMenuItem jiv = new JMenuItem("粘贴(V) Ctrl+V");
jm2.add(jic);
jm2.add(jiv);
jm.add(jm2);
JMenu jm3 = new JMenu("帮助(H)");
//在菜单栏中设置菜单子项
JMenuItem ji = new JMenuItem("查看帮助(V)");
jm3.add(ji);
jm.add(jm3);
jf.setJMenuBar(jm);
/********************设置计算器的背景**********************/
//实例化一个图标对象
ImageIcon bg = new ImageIcon("image/bg1.png");
//实例化一个标签对象
JLabel jlb = new JLabel(bg);
//设置标签的大小
jlb.setBounds(0, 0, bg.getIconWidth(),bg.getIconHeight());
//把标签添加到LayeredPane的最底层
jf.getLayeredPane().add(jlb,new Integer(Integer.MIN_VALUE));
//把LayeredPane的上一层设置为透明
JPanel contentPanel = (JPanel)jf.getContentPane();
//设置面板为透明
contentPanel.setOpaque(false);
/*********************窗体的北边*************************/
JPanel jp1=new JPanel();
jp1.setOpaque(false);
//实例化一个文本输入框
JTextField jt=new JTextField();
jt.setText("0");
jt.setHorizontalAlignment(JTextField.RIGHT);
jt.setFont(new Font("楷体",Font.BOLD,35));
jt.setEditable(false);
jt.setPreferredSize(new Dimension(208,54));
jp1.add(jt);
jf.add(jp1,BorderLayout.NORTH);
/*******************************窗体的西边*******************************************/
//实例化一个版面对象
JPanel jpw = new JPanel();
jpw.setOpaque(false);
jpw.setPreferredSize(new Dimension(192,250));
//设置面板为流式布局
jpw.setLayout(new FlowLayout(FlowLayout.RIGHT,6,6));
String[] array={"image/MC.png","image/MR.png","image/MS.png",
"image/M+.png","image/ZUOJIAN.png",
"image/CE.png","image/C.png","image/+-.png",
"image/7.png","image/8.png","image/9.png",
"image/XIE.png","image/4.png","image/5.png",
"image/6.png","image/XINHAO.png",
"image/1.png","image/2.png","image/3.png","image/-.png",
"image/0.png","image/DIAN.png","image/+.png"};
for(int i=0;i<array.length;i++){
JButton jbu= new JButton(new ImageIcon(array[i]));
if(array[i].equals("image/0.png")){
jbu.setPreferredSize(new Dimension(80,28));
jpw.add(jbu);
}else{
jbu.setPreferredSize(new Dimension(38,28));
jpw.add(jbu);
}
}
jf.add(jpw,BorderLayout.WEST);
/******************窗体的东边**********************/
//实例化一个面板对象
JPanel jpe = new JPanel();
jpe.setOpaque(false);
//设置面板的布局为流式布局
jpe.setLayout(new FlowLayout(FlowLayout.LEFT,0,6));
jpe.setPreferredSize(new Dimension(75,260));
String[] array1={"image/M-.png","image/GENHAO.png",
"image/%.png","image/1X.png","image/=.png"};
//实例化按钮对象
for(int j=0;j<array1.length;j++){
JButton jbut= new JButton(new ImageIcon(array1[j]));
if(array1[j].equals("image/=.png")){
jbut.setPreferredSize(new Dimension(38,65));
jpe.add(jbut);
}else{
jbut.setPreferredSize(new Dimension(38,28));
jpe.add(jbut);
}
}
jf.add(jpe);
jf.setVisible(true);
}
}