图形界面开发

目标:
 1.掌握Java提供的组件和布局API类。
 2.掌握API文档的查询
 
1.介绍Java的图形界面类
 1.awt(包名:java.awt)   jdk1.4之前推出的图形界面类
  Frame
  
 2.swing(包名:javax.swing)[轻量级组件]
  jdk1.4的时候推出的图形界面类
  所有的图形界面类的第一个字母是大写J开头的。
  JFrmae
  
 跨平台

2.常用的组件类(javax.swing)
 容器组件
  JFrmae   窗体容器(边框)
  JPanel   面板容器(流式)
 
 元素组件
  JLabel    标签
  JTextField   文本输入框
  JPasswordField   密码输入框
  JComboBox   下拉框
  JCheckBox   复选框
  JButton    按钮
  
 javax.swing.JFrame

3.常用的布局类(java.awt)
 BorderLayout    边框布局
 FlowLayout    流式布局
 GridLayout    网格布局

4.实现一个登录界面
 1.定义一个类,在类中定义定义主函数和初始化界面的initGUI()方法。
 2.在主函数中实例化类的对象,然后调用initGUI方法。
 3.在initGUI方法中实例化JFrame类的对象,同时设置JFrame类对象的属性值。
 4.给你的容器设置布局方法
 5.实例化容器和元素组件,将其添加到窗体上。
 6.在initGUI方法的最后一行添加窗体可见的方法。

5.练习
 1.QQ登录界面

package lxf0630;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;

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.JPasswordField;


//定义一个QQLogin类
public class QQLogin {
	
	// 定义程序的入口主函数
	
	public static void main(String[] args) {
		QQLogin qq = new QQLogin();
		qq.initGUI();
	}

	
	// 定义一个初始化界面的方法
	 
	public void initGUI(){
		//1.实例化一个JFrame类的对象
		JFrame jf = new JFrame();
		//2.设置jf对象的属性值
		jf.setTitle("QQ登录界面");
		jf.setSize(new Dimension(380,295));
		jf.setDefaultCloseOperation(3);
		jf.setLocationRelativeTo(null);//设置窗体显示在屏幕的中央
		jf.setResizable(false);//设置禁止调整窗体的大小
		
		//设置窗体的布局方式为边框布局,窗体默认的布局方式就是边框布局
		//jf.setLayout(new BorderLayout());
		
		/******************窗体背景*********************/
		//实例化一个图标对象
		ImageIcon backgroundImage = new ImageIcon("Images/dxy.jpg");
		//实例化一个标签对象,让标签显示图标对象
		JLabel backgroundJla = new JLabel(backgroundImage);
		//设置标签的起始位置和标签的大小
		backgroundJla.setBounds(0, 0, backgroundImage.getIconWidth(), backgroundImage.getIconHeight());
		
		//添加到窗体的LayeredPanel面板的最底层(第二层面板)
		jf.getLayeredPane().add(backgroundJla,new Integer(Integer.MIN_VALUE));
		
		//获取窗体的第一层面板
		JPanel contentPanel = (JPanel)jf.getContentPane();
		//设置第一层面板为透明
		contentPanel.setOpaque(false);
		
		/************************************************/
		
		
		/****************北边的面板*********************/
		JPanel northPanel = new JPanel();
		northPanel.setOpaque(false);//设置面板为透明
		northPanel.setPreferredSize(new Dimension(0,120));
		//设置面板的布局方式为边框布局,JPanel默认的布局方式是流式布局
		northPanel.setLayout(new BorderLayout());
		
		//实例化一个JLabel的对象,并且让标签上显示图标
		JLabel jla = new JLabel("");
		//jla.setFont(new Font("楷体",Font.BOLD,36));
		
		//将jla对象添加到northPanel对象上
		northPanel.add(jla,BorderLayout.WEST);
		//将northPanel添加到jf窗体的北边
		jf.add(northPanel,BorderLayout.NORTH);
		
		/**********************************************/
		
		/****************西边的面板*********************/
		JPanel westPanel = new JPanel();
		westPanel.setOpaque(false);//设置面板为透明
		//设置面板的布局方式为流式布局,JPanel默认的布局方式是流式布局
		westPanel.setLayout(new FlowLayout());
		
		//实例化一个图标(ImageIcon)对象
		ImageIcon image = new ImageIcon("Images/QQ图片.jpg");
		//实例化一个JLabel的对象,并且让标签上显示图标
		JLabel jlaImage = new JLabel(image);
		
		//将jlaImage对象添加到westPanel对象上
		westPanel.add(jlaImage);
		//将westPanel添加到jf窗体的西边
		jf.add(westPanel,BorderLayout.WEST);
		
		/**********************************************/
		

		/****************中间的面板*********************/
		JPanel centerPanel = new JPanel();
		centerPanel.setOpaque(false);//设置面板为透明
		//设置面板的布局方式为流式布局,靠左侧显示组件,JPanel默认的布局方式是流式布局
		centerPanel.setLayout(new FlowLayout(FlowLayout.LEFT,8,5));
		
		//实例化组件类的对象
		JComboBox jco = new JComboBox();
		//设置组件的大小
		jco.setPreferredSize(new Dimension(190,25));
		//设置jco对象可以编辑
	    jco.setEditable(true);
		jco.addItem("185002513");
		jco.addItem("24589663");
		jco.addItem("921546465");
		jco.setEditable(true);
		//将jco对象添加到centerPanel对象上
		centerPanel.add(jco);
		//String st2=jco.getToolTipText();
		JLabel jbuReg = new JLabel("注册账号");
		centerPanel.add(jbuReg);
		//JTextField jt=new JTextField(st2);
		 String s=(String)jco.getSelectedItem();
		 System.out.println(s);
		JPasswordField jpa = new JPasswordField();		
		//设置组件的大小
		jpa.setPreferredSize(new Dimension(190,25));		
		//将jpa对象添加到centerPanel对象上
		centerPanel.add(jpa);
	
		
		JLabel jbuPwd = new JLabel("找回密码");
		centerPanel.add(jbuPwd);
		
		JCheckBox jch1 = new JCheckBox("记住密码");
		jch1.setOpaque(false);
		JCheckBox jch2 = new JCheckBox("自动登录");
		jch2.setOpaque(false);
		centerPanel.add(jch1);
		centerPanel.add(jch2);
		
		//将centerPanel添加到jf窗体的中间
		jf.add(centerPanel,BorderLayout.CENTER);
		
		/**********************************************/
		

		/****************南边的面板*********************/
		JPanel southPanel = new JPanel();
		southPanel.setOpaque(false);//设置面板为透明
		//设置面板的布局方式为流式布局,JPanel默认的布局方式是流式布局
		southPanel.setLayout(new FlowLayout());
		
	
		//实例化一个LoginLestener类的对象
		LoginListener l=new LoginListener(jpa,jco);
		JButton jbuLogin = new JButton("登          录");
		jbuLogin.setPreferredSize(new Dimension(155,30));
		//jbuLogin.setFont(new Font("楷体",Font.BOLD,36));
	
		//给事件源对象添加动作监听器方法,绑定事件处理类的对象
		jbuLogin.addActionListener(l);
		
	
		//将jbuLogin对象添加到southPanel对象上
		southPanel.add(jbuLogin);
		//将southPanel添加到jf窗体的南边
		jf.add(southPanel,BorderLayout.SOUTH);
		
		
		/**********************************************/
		
		//设置窗体为可见的代码一定要放置在最后一行
		jf.setVisible(true);
	}	
	
}

 
 2.计算器界面

package lxf0627;



import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;


import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
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 Calculator {

	
	public static void main(String[] args) {
		Calculator cal = new Calculator();
		cal.initUI();
	}

	
	public void initUI() {
		// 实例化一个JFrame类的对象
		JFrame jf = new JFrame();
		// 设置窗体对象的属性值
		jf.setSize(228, 323);
		jf.setTitle("计算器");
		jf.setLocationRelativeTo(null);
		jf.setResizable(false);
		jf.setDefaultCloseOperation(3);
		// JFrame默认的布局方式就是边框布局。
		
		
		
		/**************** 窗体的北边 *********************/
		// 实例化一个JPanel的对象
		JPanel panelNorth = new JPanel();
		// JPanel默认的布局是流式布局
		JTextField jte = new JTextField();
		jte.setText("0");
		jte.setHorizontalAlignment(JTextField.RIGHT);
		//jte.setEditable(false);
		jte.setFont(new Font("Arial",Font.BOLD,33));
		jte.setPreferredSize(new Dimension(190, 50));
		panelNorth.add(jte);
		jf.add(panelNorth, BorderLayout.NORTH);
		
		
		

		/**************** 窗体的中间 *********************/
		// 实例化一个JPanel的对象
		JPanel panelCenter = new JPanel();
		
		//设置布局方式
		//panelCenter.setLayout(new FlowLayout(FlowLayout.RIGHT,6,6));
		
		// JPanel默认的布局是流式布局

		String[] array = { "images/mc.jpg", "images/mr.jpg", "images/ms.jpg",
				"images/m+.jpg", "images/_.jpg", "images/ce.jpg",
				"images/c.jpg", "images/+-.jpg", "images/7.jpg",
				"images/8.jpg", "images/9.jpg", "images/a.jpg",
				"images/4.jpg", "images/5.jpg", "images/6.jpg",
				"images/星号.jpg", "images/01.jpg", "images/22.jpg",
				"images/3.jpg", "images/-.jpg", "images/0.jpg",
				"images/小数点.jpg", "images/+.jpg" };
		for (int i = 0; i < array.length; i++) {
			JButton btn = new JButton(new ImageIcon(array[i]));
			if (array[i].equals("images/0.jpg")) {
				btn.setPreferredSize(new Dimension(73, 27));
			} else {
				btn.setPreferredSize(new Dimension(34, 27));
			}
			// 将按钮添加到panelCenter上
			panelCenter.add(btn);
		}
		// 将panelCenter添加到jf上
		jf.add(panelCenter, BorderLayout.CENTER);
		
		
		

		
		// 实例化一个JPanel的对象
		JPanel panelEast = new JPanel();
		
		//设置布局方式
		panelEast.setLayout(new FlowLayout(FlowLayout.LEFT,0,5));
		
		//设置面板的大小
		panelEast.setPreferredSize(new Dimension(48,0));
		

		/**************** 窗体的东边 *********************/
		// JPanel默认的布局是流式布局

		String[] array2 = { "images/m-.jpg", "images/g.jpg", "images/%1.jpg",
				"images/xs.jpg", "images/=.jpg" };
		for (int i = 0; i < array2.length; i++) {
			JButton btn = new JButton(new ImageIcon(array2[i]));
			if (array2[i].equals("images/=.jpg")) {
				btn.setPreferredSize(new Dimension(34, 59));
			} else {
				btn.setPreferredSize(new Dimension(34, 27));
			}
			// 将按钮添加到panelEast上
			panelEast.add(btn);
		}
		// 将panelEast添加到jf上
		jf.add(panelEast, BorderLayout.EAST);
		
		//**************************设置透明*******************************
		//实例化标签图片
	
		ImageIcon img = new ImageIcon("images/d.jpg");//加载背景图片
		JLabel image1 = new JLabel(img);
		//添加图片至Frame的第二层
		jf.getLayeredPane().add(image1, new Integer(Integer.MIN_VALUE));
		//把标签的大小位置设置为图片刚好填充整个面
		image1.setBounds(0,0,img.getIconWidth(), img.getIconHeight());
		//获取frame的最上层面板为了设置其背景颜色
		Container P4=jf.getContentPane();  
		//设置透明
		((JComponent) P4).setOpaque(false);
		panelNorth.setOpaque(false);
		panelCenter.setOpaque(false);
		panelEast.setOpaque(false);


		/**************** 窗体的菜单栏 *********************/
		jf.setJMenuBar(createJMenuBar());// 设置窗体的菜单栏对象

		jf.setVisible(true);
		}

	    /**
		* 创建菜单栏的方法
		* 
		* @return 返回菜单栏对象
		*/

		
		public JMenuBar createJMenuBar() {

			// 实例化一个JMenuBar的对象
			JMenuBar jmb = new JMenuBar();

			// 实例化JMenu的对象
			JMenu menu1 = new JMenu("查看(V)");

			// 实例化JMenuItem的对象
			JMenuItem jmi1 = new JMenuItem("标准型(T)");
			JMenuItem jmi2 = new JMenuItem("科学型(S)");
			JMenuItem jmi3 = new JMenuItem("程序员(P)");
			JMenuItem jmi4 = new JMenuItem("工作表(W)");
			menu1.add(jmi1);
			menu1.add(jmi2);
			menu1.add(jmi3);
			menu1.add(jmi4);

			JMenu menu2 = new JMenu("编辑(E)");
			JMenuItem jmi5 = new JMenuItem("复制(C)");
			JMenuItem jmi6 = new JMenuItem("粘贴(P)");
			JMenuItem jmi7 = new JMenuItem("历史记录(H)");
			menu2.add(jmi5);
			menu2.add(jmi6);
			menu2.add(jmi7);
		
			JMenu menu3 = new JMenu("帮助(H)");
			JMenuItem jmi8 = new JMenuItem("查看帮助(V)");
			JMenuItem jmi9 = new JMenuItem("关于计算器(A)");
			menu3.add(jmi8);
			menu3.add(jmi9);
			
			
			jmb.add(menu1);
			jmb.add(menu2);
			jmb.add(menu3);
	
			return jmb;

			}

}


  

你可能感兴趣的:(图形界面)