界面的容器包括窗体(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); } }